未定义的对构造函数,泛型类的引用

mmm*_*mmm 0 c++ templates linker-errors

我只是在学习C++中的模板编程,并且链接器无法找到我的class'es构造函数的定义.可能是什么原因?代码如下.

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_;
};
Run Code Online (Sandbox Code Playgroud)

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() {}
Run Code Online (Sandbox Code Playgroud)

然后,当我尝试在main.cpp中创建一个Logger实例时

NodeHandle nh; 
Logger<std_msgs::String> logger(nh, "test", 10);
Run Code Online (Sandbox Code Playgroud)

链接器抱怨:

undefined reference to `Logger<std_msgs::String>::Logger(NodeHandle&, char*, short)'
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?没有编译器错误,所以所有包含都在那里,我猜.

Yoc*_*mer 6

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

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