编译模板类时出现的错误
来源:互联网 发布:王者荣耀上分英雄知乎 编辑:程序博客网 时间:2024/05/23 13:22
我写了一个模板类,将类声明和类定义分别放在了.h和.cpp,链接的时候就会出现下面的错误,所以要将成员函数的定义全部放在.h头文件中。
main.obj : error LNK2001: unresolved external symbol "public: class LinearList<int> & __thiscall LinearList<int>::Delete(int,int &)" (?Delete@?$LinearList@H@@QAEAAV1@HAAH@Z)
main.obj : error LNK2001: unresolved external symbol "public: bool __thiscall LinearList<int>::Find(int,int &)const " (?Find@?$LinearList@H@@QBE_NHAAH@Z)
main.obj : error LNK2001: unresolved external symbol "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl operator<<(class std::basic_ostream<char,struct std::char_traits<char> > &,class LinearList<int> const &)" (??6@YAAAV?$basi
c_ostream@DU?$char_traits@D@std@@@std@@AAV01@ABV?$LinearList@H@@@Z)
main.obj : error LNK2001: unresolved external symbol "public: class LinearList<int> & __thiscall LinearList<int>::Insert(int,int const &)" (?Insert@?$LinearList@H@@QAEAAV1@HABH@Z)
main.obj : error LNK2001: unresolved external symbol "public: __thiscall LinearList<int>::LinearList<int>(int)" (??0?$LinearList@H@@QAE@H@Z)
模版类的成员函数代码必须写在h文件中,不能写在cpp文件中,就这么简单。你可以看看STL中那么多模版类,全部都是写在头文件中的,没有写在cpp中的。
因为这个涉及到编译单元的问题,你在一个编译单元用到的函数在另一个编译单元不一定会被实例化。C++标准为了解决这个问题引入了export关键字,不过非常不好意思,常用的主流编译器全都不支持,因此只好把模版全部写在头文件中。
- 编译模板类时出现的错误
- 使用包含编译模型编译模板类时出现无法理解的错误
- 编译出现的错误
- 模板类在编译器编译时的错误
- VS2010编译时出现“未定义的基类”错误
- 在编译VS2005时出现的错误
- 在编译VS2005时出现的错误
- linux内核编译时出现的错误
- 编译时出现的错误和解决办法
- 【7】编译python时出现的错误
- 编译内核时出现的错误
- 编译chromium时出现的错误
- 模板编译的小错误
- linux 编译出现的错误
- 编译Hadoop出现的错误
- 编译内核出现的错误
- C++中模板类使用友元模板函数 和友员非模版函数!使用不当出现编译错误:无法解析的外部符号…
- 调用模板类出现 undefined reference 错误的解决方法
- 風雪遊杜郵,尋找白起的足跡
- ubuntu10.04-x86_64安装xen 4.0.1
- excel添加下拉框并限制表格字数
- c ++的operator的两种用法
- ural 1225. Flags
- 编译模板类时出现的错误
- 加油
- SQL Server-- 存储过程中错误处理
- 消费是未来最大结构性投资机会
- 用命令行导出和导入MySQL数据库
- IOS property
- 学习vi编辑器 —— 快速移动
- 判断MS SQLSERVER临时表是否存在
- java从含反斜线路径截取文件名