模板为什么必须定义在头文件 这是由C++编译器的性质决定的。C++采用了分离式编译的方法,.h头文件仅仅是在预处理阶段进行展开的,真正进行的是对.cpp文件的编译。编译器在编译时,看到模板并不会进行任何操作,而是在模板实际使用时(实例化),才会进行代码生成。如果模板定义放在.h头文件中,模板实现放在.cpp文件中,编译时可以看到模板的声明,但找不到定义,因此会成为外部符号,而在链接时,必然无法找到模板的实现(该外部符号的对应符号),导致链接失败。而如果模板定义在.h头文件中,则可以在编译时就找到模板的定义,进行代码生成。