2014-09-03 10 views
5

के सदस्य की आउट-ऑफ़-लाइन परिभाषा में डिफ़ॉल्ट तर्कों को जोड़ा नहीं जा सकता है मेरे पास एक आईओएस ऐप है जो एमपीएल से सी ++ वर्ग का उपयोग करता है जिसे 'square.h' कहा जाता है और जब भी मैं बनाता हूं एप्लिकेशन Xcode इस त्रुटि फेंकता है -सी ++ - क्लास टेम्पलेट

डिफ़ॉल्ट तर्क एक आउट-ऑफ-लाइन एक वर्ग टेम्पलेट के एक सदस्य की परिभाषा में नहीं जोड़ा जा सकता है

अब, सी के ++ वाक्य रचना बहुत कम है, तो क्या इस त्रुटि करता है मेरी समझ क्या मतलब है?

समस्याग्रस्त रेखा से नीचे है -

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

Hahahaha, आप कमाल कर रहे हैं! धन्यवाद! –

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

मैं दो दिन पहले से इस मुद्दे के उत्तर की तलाश में था! धन्यवाद! –

संबंधित मुद्दे