如果我在类之外定义模板类的构造函数\析构函数,则会出现链接器错误。不允许吗? 我使用Visual Studio 2010。
错误 1> main.obj:错误LNK2019:函数_main
中引用的未解析的外部符号“public:__thiscall Tree ::〜Tree(void)”(?? 1?$ Tree @ H @@ QAE @ XZ)1> main.obj:错误LNK2019:未解析的外部符号“public:__thiscall Tree :: Tree(void)”(?? 0?$ Tree @ H @@ QAE @ XZ)在函数_main中引用
在.h文件中
template <class T>
class Tree{
public:
Tree(void);
~Tree(void);
T x;
};
在.cpp文件中
#include "Tree.h"
template <class T> Tree<T>::Tree(void){
}
template <class T> Tree<T>::~Tree(void){
}
在main.cpp文件中
#include "Tree.h"
int main(){
Tree<int> t;
return 0;
}
答案 0 :(得分:3)
模板需要在您包含的文件中声明和实现。您不能将模板类声明和实现分开,然后只包含头文件。
使用模板时,在使用之前不会编译该类。因此,没有可以链接的已编译模板类。每次使用模板时,都必须针对不同的类型进行编译。由于编译器无法访问实现,因此它不知道如何编译它......