模板类和模板函数

定义模板类时,函数声明和实现都必须放在头文件里,否则编译失败,准确地讲,是在链接阶段报错.原因在于编译器虽然也编译了包含模板定义的源码文件,但是该文件仅仅是模板的定义,而并没有真正的实例化出具体的函数来。因此在链接阶段,编译器进行符号查找时,发现源码文件中的符号,在所有二进制文件中都找不到相关的定义,因此就报错了。
不过,函数的实现可以放在头文件的类外,不一定必须在类体内.

参考:
C++模板编译模型