Мне дали задание создать «калькулятор» в 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;
}
И аналогично для других функций-членов.