出现这个错误error LNK2019: unresolved external symbol的原因在于模板函数的申明与定义在不同文件中,这就导致了错误的出现。当编译器遇到一个模板定义时,它并不生成代码。这就是为什么没有调用这个函数模板时,代码可以运行成功,而调用这个函数模板时,编译出现错误。只有当实例化出模板的特定版本时,编译器才会生成代码。由于这个特性,会影响错误被检测出来。 对于调用普通的函数,编译器只要掌握函数的申明。为了生成一个实例化的版本,编译器要掌握函数模板和模板成员函数的定义。因此,与非模板代码不同,模板的头文件通常要包括申明和定义。
函数模板和类模板成员函数的定义通常放在头文件中。