问题来源:当模板文件的实现与声明分开在不同文件中时,链接时会提示找不到相应模板函数,如下
一,编译和链接的大概原理:
1,编译,遍历工程的所有代码文件,进行文件分析,这里的分析与文件后缀无关,并不是说以CPP文件为依据,源文件后缀名可以改为任何名字。
编译以文件为单位,将此文件#include的所有文件拿进来,写进此文件中,包含进来的东西可能是函数声明,也可能是函数的实现体。
如果#include "test.h",则包含进来的是一些函数和变量的声明,如果 #include "test.cpp",则其中的函数实现代码也被包含进来了。
编译的结果是一个obj文件,如test.cpp编译后是一个test.obj文件,里面是汇编指令。
同时,编译器有了该文件的一个清单,里面保存了 【函数签名(声明)】到【函数体实现】的映射
2,链接,对所有的obj文件进行拼接。
为什么要拼接?对于每个obj文件,其中若调用了其它文件的函数(外部调用),就需要知道此外部函数的具体实现,这在编译时是不关心的。
这时候去所有obj文件中查找此外部函数的实现体,若有两个以上的obj都有此实现,则链接出错,因