在C++中,使用模板类和模板函数,在.h文件中写模板类的声明,在.cpp文件中写模板类中成员函数的实现,在编译时无错误。但在main()函数中实例化模板类的对象时候产生编译错误。
eg. 在rdDBMS.h中定义如下模板类:
template <class obj_type, int rd_type>
class rdDBMS
{
list<obj_type> reader;
public:
rdDBMS(); //get data stored in file "reader.dat" into reader list
~rdDBMS();//write data in list reader into file reader.dat
void clrRdAll();//clear all reader records
int rdAdd(int, char*);//add a new reader record
obj_type *rdQuery(int);//query a reader record
void rdDispAll();
void rdMng();//manage all reader records
};
其模板函数在rdDBMS.cpp中实现,然后再main()函数中实例化对象:
rdDBMS<Teacher, 0> rd_dbms;
此时产生如下编译错误:(见下面的图片)
解决办法:
这是由于编译器在对模板类的声明和实现分离时候,会产生这种错误。
解决办法:
(1). 把模板类的声明和实现放在同一个.h文件中,然后再其他文件中包含该.h文件即可;
(2). 在.h中声明,在另外一个.cpp文件中写其实现,然后在需要使用的其他文件中包含该.cpp文件即可