Определение класса Typename класса c ++ - PullRequest
0 голосов
/ 19 февраля 2020

Мне дали задание создать «калькулятор» в c ++, который принимает любой числовой тип данных в качестве двух входных данных, вычисляет либо сумму, либо произведение, а затем записывает уравнение. Все это с использованием template <typename T>. Мне трудно найти документацию по моим конкретным c проблемам, а именно:

  • Как настроить функции и конструкторы с определенным типом возвращаемого значения.
  • Как искать в C ++ Журнал ошибок эффективно, поэтому я могу исправить ошибки так же легко, как в 'C'.

Мой .hpp файл:

#pragma once

#include <sstream>
#include "logger.hpp"

template <typename T>
class Calculator{
    public:
        Calculator(Logger *l);

        T sum(T a, T b);

        T multiply(T a, T b);

    private:
        Logger *logger;
};

Мой. cpp файл:

#include "template_calculator.hpp"

Calculator::Calculator(Logger *l){
    logger = l;
}


Calculator::T sum(T a, T b){
    T c = a + b;
    std::string str_a = std::to_string(a);
    std::string str_b = std::to_string(b);
    std::string str_c = std::to_string(c);
    logger->log(str_a + " + " + str_b + " = " + str_c);
    return c;
}


Calculator::T multiply(T a, T b){
    T c = a * b;
    std::string str_a = std::to_string(a);
    std::string str_b = std::to_string(b);
    std::string str_c = std::to_string(c);
    logger->log(str_a + " * " + str_b + " = " + str_c);
    return c;
}

Я пытался следовать указаниям этого парня: неверное использование имени шаблона без списка аргументов

.. но это не решает мою проблемы. Я получаю следующие ошибки - все из которых я не могу найти решение.

note: ‘template<class T> class Calculator’ declared here
7 | class Calculator{

error: invalid use of template-name ‘Calculator’ without an argument list
8 | Calculator::T sum(T a, T b){

Попытка использовать ссылку, указанную выше:

    #include "template_calculator.hpp"

    template <typename T>
    Calculator<T>::Calculator(Logger *l){
        logger = l;
    }


    Calculator<T>::T sum(T a, T b){
        T c = a + b;
        std::string str_a = std::to_string(a);
        std::string str_b = std::to_string(b);
        std::string str_c = std::to_string(c);
        logger->log(str_a + " + " + str_b + " = " + str_c);
        return c;
    }


    Calculator<T>::T multiply(T a, T b){
        T c = a * b;
        std::string str_a = std::to_string(a);
        std::string str_b = std::to_string(b);
        std::string str_c = std::to_string(c);
        logger->log(str_a + " * " + str_b + " = " + str_c);
        return c;
    }

согласно:

    template<typename T>
LinkedList<T>::LinkedList()
{
   start = nullptr;
   current = nullptr;
}

И аналогично для других функций-членов.

...