,模板类的构造函数如何写
求助,模板类的构造函数怎么写这个工程有三个文件,组织起来怎么编译出错:main.obj : error LNK2001: unreso
求助,模板类的构造函数怎么写
这个工程有三个文件,组织起来怎么编译出错:
main.obj : error LNK2001: unresolved external symbol "public: __thiscall List<int>::List<int>(void)" (??0?$List@H@@QAE@XZ)
Debug/test_DOS.exe : fatal error LNK1120: 1 unresolved externals
百思不得其解,看起来没错啊
List.h 如下
C/C++ codetemplate <class List_entry>class List{ public: List();};
List.cpp 如下
C/C++ code#include <iostream>#include "List.h"using namespace std;template <class List_entry>List<List_entry>::List(){}
main.cpp 如下
C/C++ code#include <iostream>#include "List.h"using namespace std;int main(){ List<int> test;}
当然,如果定义中不写构造函数,不会有错,那是系统提供默认的吧
[解决办法]模板类里面的函数必须写到头文件里面,要么加export。不过C++的export几乎没有编译器支持。
[解决办法]编译器在编译cpp的时候不知道要生成List<int>::List()的代码,所以link的时候就找不到. --不太清楚新的标准是不是支持这个,在老的编译器中有两个解决方案:
1)把实现放在.h中
2)在List.cpp中声明一下要用到的实例:
using namespace std;
template class List <int>; //需要用到int,就在这里写一下
template class List <float>; //其他类型也一样,要用的话,就要在这里写一下
template <class List_entry>
List<List_entry>::List()
{}
[解决办法]把模板类的实现也放到.h里面去
[解决办法]模板不支持分离编译。你需要把所有的申明和定义放在一个文件里实现
[解决办法]