C++中模板的声明和实现应该放在同一个文件中

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;

此时产生如下编译错误:(见下面的图片)

8.gif

解决办法:

这是由于编译器在对模板类的声明和实现分离时候,会产生这种错误。

解决办法:

(1). 把模板类的声明和实现放在同一个.h文件中,然后再其他文件中包含该.h文件即可;

(2). .h中声明,在另外一个.cpp文件中写其实现,然后在需要使用的其他文件中包含该.cpp文件即可

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
是的,C++模板的定义和实现可以写在同一个文件。事实上,C++编译器在编译过程需要看到模板的定义和实现,所以将它们放在同一个文件是常见且合理的做法。 C++模板通常包含两部分:头文件(.h或.hpp)和源文件(.cpp)。头文件包含模板声明和定义,而源文件包含模板实现。在使用模板的地方,编译器会根据需要将模板实例化为具体类型的代码。 将模板定义和实现放在同一个文件有以下几个优点: 1. 可读性和维护性:将模板定义和实现放在同一个文件,可以更方便地查看和理解模板的完整实现。这样也更便于进行代码的维护和修改。 2. 编译效率:将模板定义和实现放在同一个文件可以避免分离编译带来的额外开销。编译器在编译时可以直接看到完整的模板定义,从而生成正确的实例化代码,提高编译效率。 3. 依赖管理:将模板定义和实现放在同一个文件可以简化依赖管理。当其他源文件需要使用该模板时,只需包含头文件即可,不需要额外处理源文件的依赖关系。 需要注意的是,模板的定义和实现通常都应该放在头文件,并通过`#include`语句引入到其他源文件。这样可以确保模板的定义在使用之前可见,以便编译器进行模板实例化。 总而言之,C++模板的定义和实现可以写在同一个文件,这样有助于代码的可读性、维护性和编译效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值