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编译器中使用带有默认参数值的模板类成员时出现的错误,并提供了两种解决方法:一是在类内部直接定义成员函数;二是移除类外部定义时的默认参数。
3万+

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



