C++模板的定义一定要在头文件中 - LNK2019无法链接的外部符号,LNK1120无法解析的外部命令
编译器在模板函数的调用处,才最终知道如何生成代码。
模板函数的不能像普通的成员函数那样声明于头文件而定义在cpp源文件,而是一定要定义在头文件中。
若像普通成员函数那样声明和定义,单个文件可以编译通过,但被其他文件使用时会报LNK2019,LNK1120错误:
例外:
如果这个模板函数是某个类的内部类的成员函数,它是可以仅在外部类的头文件中声明,然后在外部类的cpp源文件中定义的。如:
A.h
class A {
....
class B {
template<class T>
void Func(T t);
}
}
A.cpp
#include "A.h"
template<class T>
A::B::Func(T t)
{
do_something_with(t);
}