我有一个我不太明白的问题。我有一个类节点。
template<class T>
class node {
protected:
T _data;
public:
node(T data);
};
这是在“node.h”文件中。在“node.cpp”文件中,有这个构造函数:
#include "node.h"
template<class T>
node<T>::node (T data) {
_data = data;
}
虽然编译器没有发现错误,但链接器 (ld) 告诉我:
/usr/bin/ld: Undefined symbols:
node<int>::node(int)
奇怪的部分...如果我将构造函数从 .cpp 移动到 .h 文件,一切正常。问题出在哪里?
最佳答案
问题在于模板不是类——您通常不会将它们写在两个单独的文件中。模板类是编译器用来生成类的代码。因此,您的实现代码需要有效地内联,即在您发现的 header 中。
关于为什么必须这样的更完整解释,请参阅C++ FAQ Lite .
关于带有模板的c++类找不到它的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/644397/