繁体   English   中英

函数模板特化编译错误

[英]function template specialization compile error

##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());

我得到的错误是:错误LNK2005:“void __cdecl func(int)”(?? $ func @ H @@ YAXH @ Z)已在A.obj中定义,找到一个或多个多重定义的符号

函数模板特化是否不被视为普通函数模板? 看起来它将在A的目标文件中。

作为template<> void func<int>(int t) {}是函数重载而不是函数模板(即,所有类型在定义时都已知,因此它不再是模板),它必须标记为inline或在.cpp文件中定义,以避免多个定义错误,就像任何其他函数定义一样。

问题如下:完全模板专业化不再是模板 ,它更像是普通的功能 所以你应该采取相应行动:

  • 要么将func<int>()定义放在cpp文件中

  • 或使其内联

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM