我看过的C++书都说在*.h中写类的定义(成员函数只声明而未定义)、在*.cpp中写其成员函数的定义是一种比较标准的做法,对模板类也没做特别说明。于是,昨天写一个模板类时,我很自然地把代码分布在*.h和*.cpp中,调用此类的源文件中写上#include "*.h",却发现在连接时找不到函数。改为#include "*.cpp"后,顺利运行。
之后我又写了个简单的模板类试验,发现结果一样。于是我删了*.cpp,把类的定义写到*.h中。
原理可参见 http://blog.csdn.net/lichengyu/article/details/6792135 ,以下为摘录:
“通常情况下,你会在.h文件中声明函数和类,而将它们的定义放置在一个单独的.cpp文件中。但是在使用模板时,这种习惯性做法将变得不再有用,因为当实例化一个模板时,编译器必须看到模板确切的定义,而不仅仅是它的声明。因此,最好的办法就是将模板的声明和定义都放置在同一个.h文件中。这就是为什么所有的STL头文件都包含模板定义的原因。”
原文链接: https://www.cnblogs.com/linjunqing/archive/2012/12/27/2835199.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/73750
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!