今天,写了一个List的模板类,然后把它的声明和定义分别放在头文件和源文件中,发现编译不通。然后,就有疑问了,一是为什么那些普通类我们分为头文件和源文件能编译通过,二是模板为什么不行,所以这个编译究竟做了什么,这才是我的问题。
当我们对一个solution右键选择生成的时候,会对所有的.cpp进行编译(我感觉哈),每个对应生成一个.obj文件。当cpp进行编译时,那种有include头文件的,就是将头文件中的内容直接copy到cpp。隐约记得之前上汇编的课的时候讲过,会生成一些symbol和地址的对应的表,那么应该是在头文件的声明中,那些函数方法的入口地址就已经确定了,然后当调用时,链接器会在不同的obj中进行链接,找到具体的实现。
但是,在模板中,在编译时他需要被实例化。比如说我在a.cpp中用到了b.h里声明的一个模板类,但是在b.h里