2014-09-03 113 views
5

我有一個iOS應用程序,使用從MPL稱爲'square.h'的C++類,每當我構建應用程序的Xcode拋出這個錯誤 -C++ - 默認參數不能添加到類模板的成員的線外定義

默認參數不能被添加到一個類模板的成員的亂線定義現在

,我的C++語法的很少,所以這個錯誤是什麼的認識意思?

有問題的線路低於 -

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

回答

10

默認參數不是定義的一部分,只聲明:

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 */) 
{ 

} 

或:

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) 
    { 

    } 
}; 
+0

哈哈哈哈,你太棒了!謝謝! – 2014-09-03 14:44:47

4

根據標準( N3797§8.3.6/ 6默認參數[dcl.fct.defa ULT](重點煤礦):

除類模板的成員函數,在一個成員函數定義的默認參數即 出現的類定義之外被添加到所提供的一組默認參數類定義中的成員 函數聲明。 類模板 的成員函數的缺省參數應在類模板中成員函數的初始聲明中指定。

上面的意思是模板類成員函數的默認參數只在類的定義內部。因此,你要麼把在成員函數的聲明默認參數:

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

或者你可以把類定義的成員函數的定義整。

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

自兩天前我一直在尋找這個問題的答案!謝謝! – 2014-09-03 14:58:45