如果我在类外定义模板类的构造函数/析构函数,会出现链接错误。这是不允许的吗?我使用的是Visual Studio 2010。
错误信息:
1>main.obj : error LNK2019: unresolved external symbol "public: __thiscall Tree::~Tree(void)" (??1?$Tree@H@@QAE@XZ) referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol "public: __thiscall Tree::Tree(void)" (??0?$Tree@H@@QAE@XZ) referenced in function _main
在.h文件中。
在main.cpp文件中。
错误信息:
1>main.obj : error LNK2019: unresolved external symbol "public: __thiscall Tree::~Tree(void)" (??1?$Tree@H@@QAE@XZ) referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol "public: __thiscall Tree::Tree(void)" (??0?$Tree@H@@QAE@XZ) referenced in function _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;
}
template class Tree<int>;
。这样做可以为int
实例化模板,因此main.cpp
可以使用与int
有关的Tree
模板,而不会涉及其他数据类型。这对我日常使用非常有用。 - fiorentinoing