为什么模板要写在.h里面
//test.h template<typename T> class A{ public: A(); void fun(); }; //test.cpp #include"test.h" template<typename T> A<T>::A(){} template<typename T> void A<T>::fun(){} main.cppint main(){ A<int> a;//undefined reference to `A<int>::A()'? } 解决办法是#include"test.cpp",如果在gcc下用命令行那么只能#include"test.cpp",如果同时#include"test.h",则出现 class 重复定义的错误这其实是模板包含模型,它增加了包含test.cpp的开销。还有一个叫分离模型,即用export,在一个文件里面定义模板,并在模板的定义和(非定义的)声明的前面加上关键字export.这是c++标准里面规定的,但遗憾的是没有流传开来,没有得到大公司的支持。所以只能用包含模型了,为了减少开销,开发时模板一般都写在头文件里面了