template模板的声明及定义
来源:互联网 发布:华为网络机顶盒官网 编辑:程序博客网 时间:2024/06/04 19:39
我想实现类模板的声明跟定义分类,即分别放在h头文件,cpp文件里
下面是我工程里的三个文件:
a.h头文件:
#ifndef INDIRECTLIST_H_
#define INDIRECTLIST_H_
template<class T>
class a{
public:
a(int MaxListSize = 10);
private:
MaxSize;
};
#endif
a.cpp文件:
#include "a.h"
template<class T>
a<T>::a(int MaxListSize)
{
MaxSize = MaxListSize;
}
main文件:
#include <iostream>
#include "a.h"
using namespace std;
int main()
{
a<int> l(20);
return 0;
}
编译通过了,可是build的时候出现了错误提示:
main.obj : error LNK2001: unresolved external symbol "public: __thiscall a<int>::a<int>(int)" (??0?$a@H@@QAE@H@Z)
Debug/a.exe : fatal error LNK1120: 1 unresolved externals
在网上查了一下,发生这种错误有两种可能:
1、程序中缺少lib文件,在project->setting里的link中加入所需lib文件即可。
2、在程序中函数只有声明没有定义,而导致这个问题的很可能的原因是在函数定义时把函数名称写错了,所以以后一定要在写函数定义时复制函数声明中的函数名,以避免类似不必要的麻烦发生。
这个project里也没涉及到什么额外的lib文件,所以应该是第二个可能了,函数只有声明没有定义。
原来这个跟模板的编译模型有关
1.包含编译模型:编译器必须看到用到的所有模板的定义。就是把模板类的声明和定义放在一起,如头文件中。
2.分离编译模型:是指模板类声明在头文件中,而成员函数和静态数据成员放在.c/.cpp中,这时需要用C++关键字export指明
不过目前Visual C++只支持包含编译模式,所以在vc中只能将类声明跟定义放在同一个文件中。
为什么C++编译器不能支持对模板的分离式编译:http://blog.csdn.net/pongba/archive/2003/10/24/19130.aspx
- template模板的声明及定义
- 模板的声明与定义
- 类的声明及定义
- 链表类的声明及定义
- C++的模板的声明和定义
- 模板类的定义与声明
- 类模板的声明和定义
- 模板类中友元函数的声明与定义
- 模板的声明和定义编译问题
- c++类模板的声明与定义
- C++ template模板函数的定义与调用
- 模板template和宏定义define一起的例子
- C++模板编程--模板的声明和定义
- c++中模板_类模板的声明和定义
- template模板及模板类的实例化
- vue的模板 <template></template>
- Jsp的定义及作用还有声明
- 类的声明、定义及应用
- FCKeditorV2 的使用
- windows 添加右键菜单脚本
- 为注册用户实现复杂的数据类型配置--购物车
- “四年一闰”的说法原来是错误的!
- LPC21XX 串口的接收和发送中断(MDK)
- template模板的声明及定义
- Linux系统管理基本命令——学习札记(一)
- ASP.NET导出EXCEL类
- C Reference Manual Reading Notes: 007 C++ Compatibility
- 学习笔记 -- 进程控制 API
- JS的公共函数
- Oralce学习笔记之权限管理
- Oracle 修改带数据的字段类型
- 交友-性能测试-北京