##A.hh
template<class T> void func(T t) {}
template<> void func<int>(int t) {}
void func2();
##A.cpp
void func2() {}
##main.cpp
func("hello");
func(int());
我得到的错误是: error LNK2005: "void __cdecl func(int)" (??$func@H@@YAXH@Z) 已在 A.obj 中定义,
找到一个或多个多重定义的符号
函数模板特化是否不被视为普通函数模板?看起来它将出现在 A 的目标文件中。
As template<> void func<int>(int t) {}
是函数重载而不是函数模板(即所有类型在定义时都是已知的,因此它不再是模板),它必须标记为inline
或在 .cpp 文件中定义以避免多重定义错误,就像任何其他函数定义一样。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)