类模板问题
为什么将类模板定义分成头文件和实现部分.cpp文件,在连接时unresolved externals的错。如何改?
例如:template<class T>
class tem
{T *data;
int size;
public:
tem();
};
类实现部分:#include"tem.h"
template <class T>
template<T>::tem(int n)
{
data=new T[n];
size=n;
}
void main()
{ tem<int>x(5);}
连接时报如下错:main.obj : error LNK2001: unresolved external symbol "public: __thiscall tem<int>::List<int>(void)" (??0?$List@M@@QAE@XZ)
[解决办法]
在头文件中
- C/C++ code
class tem {T *data; int size; public: tem(); };
[解决办法]
关于模板为什么不能分离编译可以google刘未鹏的为什么编译器不支持模板分离编译
[解决办法]
好像是模板类的声明和实现要放在一个文件中吧,不能分开来
[解决办法]
如果将类模板代码放在头文件和cpp文件中,类模板就无法实例化。编译时,会将各种代码资源文件编译成一个个object,然后连接。
[解决办法]
函数 tem()内部是空类型,定义的时候成了tem(int n),是这个原因吧
[解决办法]
模板的话把他们的声明和实现都放在同一个文件里,如tem.h。
[解决办法]
学习了
[解决办法]
tem<int>x(5);//简单的说你这里要定义一个tem<int>类型的对象x这个时候需要tem<int>类型的构造函数,但是在tem.h里面是没有这个tem<int>类型的完整定义的,更别说是它的构造函数了,因为模板只有在需要才实例化,而tem.cpp里面也没使用过tem<int>这个类型,所以tem.cpp里面也没有所需要的这个类型的定义。所以连接器就发出错误。
[解决办法]
我一盘是头文件和实现都放在一起。