我有一个问题我不太明白。我有一个节点类。
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:未定义的符号:
节点::节点(int)
奇怪的部分...如果我将构造函数从 .cpp 移动到 .h 文件,一切正常。哪里有问题?
问题是模板不是类 - 通常不会将它们编写在两个单独的文件中。模板类是编译器用来执行的代码generate类。因此,您的实现代码需要有效地内联,即在您发现的标头中。
为了更全面的解释why必须是这样,请参阅C++ 常见问题精简版 http://www.parashift.com/c++-faq-lite/templates.html#faq-35.12.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)