首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

,模板类的构造函数如何写

2012-06-11 
求助,模板类的构造函数怎么写这个工程有三个文件,组织起来怎么编译出错: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++ code
template <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里面去
[解决办法]
模板不支持分离编译。你需要把所有的申明和定义放在一个文件里实现
[解决办法]
探讨

模板不支持分离编译。你需要把所有的申明和定义放在一个文件里实现

热点排行