如果函数模板按照普通的函数声明放在头文件的,定义放在。cpp文件,会出现错误:
模板函数声明、定义、引用有什么要注意的问题么?? -- mylib.h -- template <class T> T max_v(T v1, T v2); -- mylib.cpp -- #include "mylib.h " template <class T> T max_v(T v1, T v2) { return (v1 > v2 ? v1 : v2); } -- mylibtest.cpp -- #include "mylib.h " int main() { std::cout < < max_v(2, 4) < < std::endl; system( "pause "); return 0; } 使用g++编译器,提示“undefined reference to `int max_v <int> (int, int) '”
函数模板是编译时自动生 成各种类型的函数实例,如同内联函数,编译时其实现必须可见,一般其实现应该包含在头文件中。
模板函数的声明定义要放在头文件中,不可以分开放在.h和.cpp中。
同样,在一个类中将一个成员函数定义为函数模板时也是要遵从这个规则:实现要放在头文件里。