对构造函数的未定义引用,泛型类
Undefined reference to constructor, generic class
我正在学习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() {}
然后,当我试图在main.cpp
中创建一个Logger实例时NodeHandle nh;
Logger<std_msgs::String> logger(nh, "test", 10);
链接器报错:
undefined reference to `Logger<std_msgs::String>::Logger(NodeHandle&, char*, short)'
我做错了什么?没有编译错误,所以我猜所有的包含都在那里。
您需要将模板实现放在标题中。
任何引用模板化代码的代码都需要"看到"实现,这样编译器才能从模板中生成代码。
相关文章:
- C++泛型类错误,问题出在哪里?
- C++泛型类,单独实现?
- 如何在 C++ 中声明泛型类
- 在C++中分配泛型类
- 基于变量输入的泛型类方法计算
- C++处理取消引用语法的泛型类
- 用于重载的泛型类成员函数
- 将类型作为指向另一个类的对象的指针的泛型类-NOT WORKING
- 在泛型类中使用带有 CUDA 关键字的模板类
- 在类中使用泛型类成员
- 如何在main中重载运算符>泛型类.cpp
- C++泛型类中的字段/属性
- 用返回子类的方法设计C++泛型类
- C++ 堆栈泛型类,int 变量将 32765 作为值而不是 1
- 将资源移出泛型类
- C++中的泛型类
- 可以在泛型类中为一种类型提供一个可用的函数
- 如何在C++中从泛型类创建对象
- 返回泛型类的引用
- 对构造函数的未定义引用,泛型类