त्रुटि: पैरामीटर 1 के लिए दिया गया डिफ़ॉल्ट तर्क


95

मुझे यह त्रुटि संदेश नीचे दिए गए कोड के साथ मिल रहा है:

class Money {
public:
    Money(float amount, int moneyType);
    string asString(bool shortVersion=true);
private:
    float amount;
    int moneyType;
};

पहले मुझे लगा कि C ++ में पहले पैरामीटर के रूप में डिफ़ॉल्ट पैरामीटर की अनुमति नहीं है, लेकिन इसकी अनुमति है।


क्या आप थोड़ा और विवरण दे सकते हैं?
एटिएन डे मार्टेल

मैं विंडोज पर MinGW 5.1.6 के साथ ग्रहण सीडीटी का उपयोग कर रहा हूं।
कोको

जवाबों:


208

आप शायद फ़ंक्शन के कार्यान्वयन में डिफ़ॉल्ट पैरामीटर को फिर से परिभाषित कर रहे हैं। इसे केवल फ़ंक्शन घोषणा में परिभाषित किया जाना चाहिए।

//bad (this won't compile)
string Money::asString(bool shortVersion=true){
}

//good (The default parameter is commented out, but you can remove it totally)
string Money::asString(bool shortVersion /*=true*/){
}

//also fine, but maybe less clear as the commented out default parameter is removed
string Money::asString(bool shortVersion){
}

1
अब यह कहता है: स्ट्रिंग मनी :: asString () 'क्लास' मनी में किसी भी तरह से मेल नहीं खाता है
pocoa

1
@pocoa आपको अभी भी bool shortVersionपैरामीटर रखने की ज़रूरत है , बस हटा दें या टिप्पणी करें= true
Yacoby

@Yacoby: धन्यवाद, आप सही थे। यह कोई मतलब नहीं है, बहुत भ्रामक है।
पोकोआ 14

6
@pocoa: वास्तव में, यह समझ में आता है। यदि आप मापदंडों के लिए डिफ़ॉल्ट मान देते हैं, तो ये कॉलर में भरे जाते हैं । तो वे है , समारोह की घोषणा में हो सकता है क्योंकि यह क्या कॉल देखने की जरूरत है। यदि आपको उन्हें परिभाषा में दोहराना था तो यह निरर्थक होगा और बनाए रखने के लिए अधिक परेशानी होगी। (यह इसलिए भी है कि मैं कार्यान्वयन में डिफ़ॉल्ट मापदंडों पर टिप्पणी करने के बारे में याकोबी से असहमत हूं। आईएमई, वास्तविक परियोजनाओं में इस तरह की टिप्पणी जल्द या बाद में घोषणा के साथ सिंक से बाहर हो जाएगी।
sbi

1
वास्तविक परिभाषा है std::string Money::asString(bool)। ध्यान दें कि इसमें पैरामीटर का नाम भी शामिल नहीं है। और, वास्तव में, आप परिभाषा की तुलना में घोषणा में विभिन्न नामों का उपयोग कर सकते हैं। (यह बहुत बड़ी परियोजना में महत्वपूर्ण है जब - जो भी कारणों से - आप परिभाषा में नाम बदलना चाहते हैं, लेकिन कोड की लाखों पंक्तियों को फिर से जोड़ना नहीं चाहते हैं जो घोषणा पर निर्भर करते हैं।)
sbi
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.