C++ - 无法将默认参数添加到类模板成员的外联定义中

Ten*_* Go 7 c++ openframeworks ios

我有一个iOS应用程序,它使用MPL的一个名为'square.h'的C++类,每当我构建应用程序时Xcode都会抛出此错误 -

无法将默认参数添加到类模板成员的外联定义中

现在,我对C++语法的理解很少,那么这个错误意味着什么呢?

有问题的线在下面 -

template <class T> 
TSquare<T>::TSquare (T size_, T x_, T y_, T scale_=0)
{
    size = size_;
    x = x_;
    y = y_;
    scale = scale_;
}
Run Code Online (Sandbox Code Playgroud)

Pio*_*cki 13

默认参数不是定义的一部分,只是声明:

template <class T>
class TSquare
{
public:
    TSquare (T size_, T x_, T y_, T scale_ = 0);
};

// out-of-line definition of a member of a class template:
template <class T>
TSquare<T>::TSquare (T size_, T x_, T y_, T scale_ /* = 0 */)
{

}
Run Code Online (Sandbox Code Playgroud)

要么:

template <class T>
class TSquare
{
public:
    // in-line definition of a member of a class template
    TSquare (T size_, T x_, T y_, T scale_ = 0)
    {

    }
};
Run Code Online (Sandbox Code Playgroud)


101*_*010 5

根据标准(N3797)§8.3.6/ 6默认参数[dcl.fct.default](强调我的):

除了类模板的成员函数之外,出现在类定义之外的成员函数定义中的缺省参数将添加到类定义中的成员函数声明提供的缺省参数集中.类模板的成员函数的默认参数应在类模板中的成员函数的初始声明中指定.

上述意味着模板类的成员函数的默认参数仅在类的定义内.因此,您将在成员函数的声明中放入默认参数:

template<T>
class TSquare {
  ...
  TSquare (T size_, T x_, T y_, T scale_ = 0);
  ...
};
Run Code Online (Sandbox Code Playgroud)

或者您应该将成员函数的整个定义放在类定义中.

template<T>
class TSquare {
  ...
  TSquare (T size_, T x_, T y_, T scale_ = 0) {
    ...
  }
  ...
};
Run Code Online (Sandbox Code Playgroud)