"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > गैर-कॉन्स्ट सदस्य फ़ंक्शन में कॉन्स्ट ऑब्जेक्ट पास करने से C++ में क्वालीफायर अयोग्यता त्रुटि क्यों होती है?

गैर-कॉन्स्ट सदस्य फ़ंक्शन में कॉन्स्ट ऑब्जेक्ट पास करने से C++ में क्वालीफायर अयोग्यता त्रुटि क्यों होती है?

2025-01-14 को प्रकाशित
ब्राउज़ करें:601

Why Does Passing a Const Object to a Non-Const Member Function Cause a Qualifier Disqualification Error in C  ?

कॉन्स्ट ऑब्जेक्ट को 'इस' तर्क के रूप में पास करना: क्वालीफायर अयोग्यता त्रुटि

सी में, सदस्य कार्यों के लिए कॉन्स्ट ऑब्जेक्ट को 'इस' तर्क के रूप में पास करना इसके परिणामस्वरूप "const xxx' को सदस्य फ़ंक्शन के 'इस' तर्क के रूप में पास करने से क्वालिफायर खारिज हो जाते हैं" त्रुटियां हो सकती हैं। ऐसा इसलिए होता है क्योंकि कंपाइलर इस संभावना पर विचार करता है कि गैर-कॉन्स्ट सदस्य फ़ंक्शन ऑब्जेक्ट को संशोधित कर सकते हैं, जो कॉन्स्ट ऑब्जेक्ट्स के लिए निषिद्ध है।

समस्या विश्लेषण

प्रदान किए गए कोड में , सेट में ऑब्जेक्ट को कॉन्स्ट स्टूडेंट टी के रूप में संग्रहीत किया जाता है। लूप के भीतर सदस्य फ़ंक्शन getId() और getName() तक पहुंचने पर, कंपाइलर इस समस्या का पता लगाता है क्योंकि ऑब्जेक्ट स्थिरांक हैं और सदस्य फ़ंक्शन स्थिरांक के रूप में चिह्नित नहीं हैं।

Solution

त्रुटि को हल करने के लिए, getId() और getName() फ़ंक्शन को const बनाया जाना चाहिए:

int getId() const {
    return id;
}

string getName() const {
    return name;
}

यह कॉन्स्ट नियमों का उल्लंघन किए बिना कॉन्स्ट ऑब्जेक्ट पर फ़ंक्शन को कॉल करने की अनुमति देता है।

अतिरिक्त नोट्स

  • इसी तरह, ऑपरेटर
inline bool operator
  • सदस्य कार्यों में संदर्भ (ऑब्जेक्ट के बजाय) पास करना प्रदर्शन और कोड शुद्धता के लिए बेहतर है।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3