如何在模板类之外定义构造函数

Cod*_*777 8 c++ constructor

如果我在类之外定义模板类的构造函数\析构函数,则会出现链接器错误。难道不允许吗?我使用 Visual Studio 2010。

错误 1>main.obj : 错误 LNK2019: 函数 _main 中引用了无法解析的外部符号“public: __thiscall Tree::~Tree(void)” (??1?$Tree@H@@QAE@XZ)

1>main.obj : 错误 LNK2019: 函数 _main 中引用了无法解析的外部符号“public: __thiscall Tree::Tree(void)” (??0?$Tree@H@@QAE@XZ)

在.h文件中

template <class T>
class Tree{
public:
    Tree(void);
    ~Tree(void);
    T x;
};
Run Code Online (Sandbox Code Playgroud)

在 .cpp 文件中

#include "Tree.h"

template <class T> Tree<T>::Tree(void){
}

template <class T> Tree<T>::~Tree(void){
}
Run Code Online (Sandbox Code Playgroud)

在main.cpp文件中

#include "Tree.h"
int main(){
    Tree<int> t;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

W.B*_*.B. 6

模板需要在您包含的文件中声明和实现。您不能将模板类声明和实现分开,然后只包含头文件。

对于模板,类在使用之前不会被编译。因此,不存在可以链接的已编译模板类之类的东西。每次使用模板时,都必须将其编译为不同的类型。由于编译器无权访问实现,因此它不知道如何编译它......