模板不支持分离编译,模板的声明和实现应该都放在.h头文件里。
因为链接器(linker)会找不到实例化的函数模板的入口地址。
链接器之所以会去找这个函数入口,是因为编译器(compiler)告诉他这里有一个函数入口。
“因为C++标准明确表示,当一个模板不被用到的时侯它就不该被实例化出来”。
模板分离编译(分别放在.h和.cpp中),VS会报错:
error LNK2001: unresolved external symbol
没有报错的,要么是没有使用这个模板,要么是在实现的.cpp文件中有实际使用。
参考:
《c++编译器为什么不支持模板的分离式编译》:
https://blog.csdn.net/bichenggui/article/details/4207084