c++ 模板 声明与实现分开编写(error LNK2001: unresolved external symbol...)

本文介绍了C++模板在声明与实现分开编写时,可能会遇到的链接错误LNK2001,并提供了解决方案。主要方法包括在模板声明文件的末尾包含实现,或者在使用模板的文件开头实例化模板。内容涉及到模板实例化、编译器和连接器的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于所有的喜欢把声明和定义分开放的C++er,在写模板时要把它俩放在一起一定感到十分郁闷,于是我本着非要棒打鸳鸯的倾向,找到了几种“棒”~

欢迎各位完善棒打鸳鸯技巧~

1.在模板的声明文件(.h)的最后一行


#include ".cpp"//模板的实现文件


2.在调用模板的文件在文件开头


#include ".cpp"//模板的实现文件


额,不才就找到这两种方式,然后就心满意足的关掉了Chrome~


另外,还找到了一个还不错的解释:自己copy了下来

原地址:http://hi.baidu.com/zhongyuan2810/item/75f7b74a927c1be6bcf45107

还有一个:http://www.cnblogs.com/zhengyuhong/archive/2011/12/29/2305597.html


个人收藏了这篇,愿因是易懂f(^^)


C++ 模板 声明和定义都放在.h文件的原因


首先,一个编译单元(translation  unit)是指一个.cpp文件以及它所#include的所有.h文件,.h文件里的代码将会被扩展到包含它的.cpp文件里,然后编译器编译该.cpp文件为一个.obj文件(假定我们的平台是win32),后者拥有PE(Portable  Executable,即windows可执行文件)文件格式,并且本身包含的就已经是二进制码,但是不一定能够执行,因为并不保证其中一定有main函数。当编译器将一个工程里的所有.cpp文件以分离的方式编译完毕后,再由连接器(linker)进行连接成为一个.exe文件。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值