带有模板的c++类找不到它的构造函数

标签 c++ templates

我有一个我不太明白的问题。我有一个类节点。

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/

相关文章:

c++ - 如何专门化另一个模板类的模板成员函数?

c++ - 为什么这些变量的地址打印为 ab@ 和 b@?

c++ - 您能否仅使用标准 c++/c++11 实现没有 "sleep"的计时器?

c++ - std::function 和错误:没有匹配的函数来调用

php - 覆盖特定的第三方 Woocommerce 插件模板

c++ - 如何围绕C 'class'概括此C++包装器?

c++ - 轻松检查共享库中未解析的符号?

c++ - 在 C++ 中使用递归时如何避免重新初始化变量?

css - 寻找这些特定的网站主题

c++ - 模板类中的模板友元函数