类模板成员函数默认值问题: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的主要内容,如果未能解决你的问题,请参考以下文章

类模板模板类函数模板模板函数

零值初始化&字符串常数作为函数模板参数

如何在模板类函数中分配struct值?

使用模板时缺少默认构造函数

成员函数指针值上的 Consexpr - 未定义的行为?

模板初步——定义模板