关于C++为什么模板类中的模板函数只能写在头文件
最近写模板类发现只能将模板函数的定义放在h文件里才能完成编译器链接。对于喜欢声明与定义分开的笔者来说这么写很不习惯。 那究竟是什么原因造成模板函数不能放在cpp文件里定义呢?本文就围绕着这个问题进行探究。 从编码到运行 首先笔者想要探讨一下一个C++项目是如何从文本文件生成可执行文件的。 预编译 预编译是将预编译宏命令进行处理,如 #include , #define , #ifdef , #pragma 等。 编译 编译是将文本中的源码转换成计算机能直接处理的汇编语言。这里要注意的是C++采用的是 分离式编译 (各个的h、cpp文件的编译独立)。 c++开发中广泛使用声明和实现分开的开发形式,其编译过程是分离式编译,就是说各个cpp文件完全分开编译,然后生成各自的obj目标文件,最后通过连接器link生成一个可执行的exe文件。引用自: https://blog.csdn.net/uestclr/article/details/51372780 链接 编译中提到了C++采用的是分离是编译,例如如下代码: Test.h void test(); Test.cpp #include "Test.h" void test() { //todo } main.cpp #include "test.h" int main() { test(); return 0; } 到此为止