对构造函数的未定义引用,泛型类 我只是学习C++中的模板编程,并且链接器无法找到我的类构造函数的定义。原因可能是什么?代码如下

对构造函数的未定义引用,泛型类 我只是学习C++中的模板编程,并且链接器无法找到我的类构造函数的定义。原因可能是什么?代码如下,c++,templates,linker-errors,C++,Templates,Linker Errors,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_;

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_;
};
模板
类记录器{
公众:
记录器(NodeHandle&nh,字符*主题,短频率);
虚拟记录器();
作废发布();
T&getMsg();
私人:
诺德汉德尔酒店;
出版商;;
T msg_;
const char*主题;
恒短脉冲频率;
};
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::Logger(NodeHandle&nh,char*主题,短pubFrequency):
新罕布什尔州(nh),
主题(主题),,
pubFrequency(pubFrequency),
发布者(主题、静态播放(&msg)){
模板
记录器::~Logger(){}
然后,当我试图在main.cpp中创建记录器实例时

NodeHandle nh; 
Logger<std_msgs::String> logger(nh, "test", 10);
nodehandlenh;
记录器(nh,“测试”,10);
链接器正在抱怨:

undefined reference to `Logger<std_msgs::String>::Logger(NodeHandle&, char*, short)'
Logger::Logger(NodeHandle&,char*,short)的未定义引用

我做错了什么?没有编译器错误,所以我想所有包含都在那里。

您需要模板化的实现位于头中


任何引用模板化代码的代码都需要“查看”实现,以便编译器可以从模板生成代码。

您需要将模板化实现放在头中


任何引用模板化代码的代码都需要“查看”实现,这样编译器就可以从模板生成代码。

这个问题有无数重复的代码;我甚至不知道从哪里开始。这个问题有无数的重复;我甚至不知道从哪里开始。