如果我在类之外定义模板类的构造函数\析构函数,则会出现链接器错误。难道不允许吗?我使用 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)
模板需要在您包含的文件中声明和实现。您不能将模板类声明和实现分开,然后只包含头文件。
对于模板,类在使用之前不会被编译。因此,不存在可以链接的已编译模板类之类的东西。每次使用模板时,都必须将其编译为不同的类型。由于编译器无权访问实现,因此它不知道如何编译它......
| 归档时间: |
|
| 查看次数: |
14086 次 |
| 最近记录: |