C++中模板函数及模板类的使用(2-2)

在使用模板类时,一般会将类定义及成员变量和成员函数的声明放在h头文件中,而将成员函数的定义放在cpp执行文件中。在编译程序时可能会出现如下错误提示

errorLNK2019: 无法解析的外部符号"public:void __thiscall Stack<int,10>::push(int)"(?push@?$Stack@H$09@@QAEXH@Z),该符号在函数_wmain中被引用

该错误提示的含义是编译器只找到了Stack模板类的push()成员函数的声明,而未能找到该成员函数的定义。产生该错误的原因是,在使用模板时,编译器必须能够访问定义模板的源代码当调用函数模板或类模板的成员函数的时候,编译器需要函数定义,需要那些通常放在源文件中的代码。而模板类的成员函数与普通类的成员函数不同,编译器不能从它对应的h头文件直接找到cpp执行文件。

标准C++为编译模板代码定义了两种模型。一种是“包含编译模型”,另外一种是“分别编译模型”。

1 包含编译模型

包含编译模型就是在h头文件中包含cpp执行文件。编译器在h头文件找到模板类成员函数声明的同时,就能够找到该函数的定义了。实现的方法为在在h头文件中的模板类定义之后加入对cpp执行文件的包含。

template<

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值