template <typename T> class A { void fun(int a = 0); }; template<typename T> void A<T>::fun(int a = 0) { /* */ }
对于类似上文代码,VS编译器会报 “an out-of-line definition of a member of a class template cannot have default arguments”错误。
其原因在于:带有默认参数值的模板类成员不能在类外进行定义,修改方式有两种。
第一种在类内进行定义:
template <typename T> class A { void fun(int a = 0){ /* */ } };
第二种在类外进行定义时,将默认值去掉:
template <typename T> class A { void fun(int a = 0); }; template<typename T> void A<T>::fun(int a /*= 0*/) { /* */ }
VS编译器模板默认参数错误解析
本文探讨了在使用Visual Studio编译器时,模板类成员函数带有默认参数值在外定义所引发的错误,并提供了两种解决方案:一是在类内部直接定义;二是去除外部定义时的默认值。

被折叠的 条评论
为什么被折叠?



