Я только изучаю программирование шаблонов на C ++, и у меня проблема с компоновщиком, который не может найти определение конструктора моего класса. В чем может быть причина? Код ниже.
logger.h
template <class T>
class Logger {
public:
Logger(NodeHandle& nh, char* topic, short pubFrequency);
virtual ~Logger();
void publish();
T& getMsg();
private:
NodeHandle& nh_;
Publisher publisher_;
T msg_;
const char* topic_;
const short pubFrequency_;
};
Logger.cpp
template <class T>
Logger<T>::Logger(NodeHandle& nh, char* topic, short pubFrequency) :
nh_(nh),
topic_(topic),
pubFrequency_(pubFrequency),
publisher_(topic_, static_cast<Msg*>(&msg_)) {}
template <class T>
Logger<T>::~Logger() {}
Затем, когда я пытаюсь создать экземпляр Logger в main.cpp
NodeHandle nh;
Logger<std_msgs::String> logger(nh, "test", 10);
компоновщик жалуется:
undefined reference to `Logger<std_msgs::String>::Logger(NodeHandle&, char*, short)'
Что я делаю не так? Нет ошибок компиляции, так что, я полагаю, есть все включения.