类属类的界面与实现应该放在同一个文件模块中

写了一个小程序,发现自己的一个知识点漏洞。比如说要写一个class C,通常我会写三个文件:C.h,C.cpp,main.cpp。这样写,一般没什么问题。可是,如果使用了类属机制,比如说在C.h中这样写:
template <class E>
class C
{

public:

    C();

    ......

};
然后在main.cpp中这样写:
C<int> c;
那么,问题就出来了!你build的时候会提示:undefined reference to C<int>::C().

ok,原因在于类属类不能像普通类一样把类界面和类实现组织在不同文件模块中。高等教育出版社的《面向对象程序设计基础》给出了详细解释:由于C++语言的类属机制目前尚未形成统一的标准,不同的C++语言编译程序采用了不同的实现策略。诸如Microsoft Visual C++或Borland C++等编译程序都不允许在定义类属类的文件模块之外创建类属类的实例,编译程序并不为类属类的定义生成任何代码,仅当类属类实例化时才产生真正的代码。由于未实例化的类属类定义没有加入目标文件(.OBJ)中,当建立的可重用类库(.LIB)中包含类属类时会出现程序链接错误。这意味着带有模板的类必须拥有源程序才可重用,所以将类属类的界面与实现放在同一个文件模块中。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值