类模板成员函数默认值问题:an out-of-line definition of a member of a class template cannot have default arguments
Posted 图米大侠
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类模板成员函数默认值问题: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> 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*/) { /* */ }
以上是关于类模板成员函数默认值问题:an out-of-line definition of a member of a class template cannot have default arguments的主要内容,如果未能解决你的问题,请参考以下文章