संपादित करें: ऐसा लगता है कि मैंने कोड को गलत तरीके से चिपकाया है, या इसे सही होने के मूल उत्तर में संपादित किया गया था। किसी भी मामले में मैं नीचे दिए गए उत्तर को संरक्षित कर रहा हूं जैसे कि कोड गलत था।
"ComeauTest.c", line 4: error: type qualifier specified more than once
const char const * const GetName() { return m_name; } const; ^
"ComeauTest.c", line 4: warning: type qualifier on return type is meaningless const char const * const GetName() { return m_name; } const; ^
"ComeauTest.c", line 4: error: declaration does not declare anything const char const * const GetName() { return m_name; } const;
क्या इसका मतलब यह है कि आपके बयान विकृत है है:
Comeau ऑनलाइन संकलक इन परिणाम देता है।
const char const * const GetName() { return m_name; } const;
पहला और दूसरा आधार एक ही चीज़ का मतलब है। आप एक ही क्वालीफायर को एक से अधिक बार निर्दिष्ट नहीं कर सकते हैं इसलिए कोड में संकलन के लिए इनमें से एक को हटा देना होगा। इन consts दोनों कि मूल्यों, करने के लिए द्वारा getName द्वारा दिया सूचक बदला नहीं जा सकता इशारा किया इस अमान्य तरह कोड बनाने निर्दिष्ट करें:
const char* name = c.GetName();
name[0] = 'a';
तीसरे स्थिरांक निर्दिष्ट करता है कि सूचक getName द्वारा दिया() ही बदला नहीं जा सकता, लेकिन जैसा कि कमौ बताते हैं, यह वापसी मूल्य पर कुछ भी पूरा नहीं करता है क्योंकि वापसी मूल्य पॉइंटर की बजाय सूचक की एक प्रति है, और इसे गैर-कॉन्स्ट पॉइंटर को असाइन किया जा सकता है।
चौथे स्थिरांक गलत स्थान पर है, तो वह ऐसा getName और समारोह शरीर के बीच होना चाहिए:
const char* GetName() const { return m.name; }
यह स्थिरांक निर्दिष्ट करता है कि वर्ग का कोई भी सदस्य getName के निष्पादन के दौरान संशोधित किया जाएगा।यह मानते हुए कि getName वर्ग व्यक्ति के एक सदस्य, इस कोड को अनुमति दी जाएगी:
const Person& p;
p.GetName();
इस स्थिरांक के बिना, ऊपर कोड विफल हो जाएगा।
कोड शायद अलग था, जैसा कि आपने पोस्ट किया है वह गलत है। यह शायद 'कक्षा X {const char * const getName() const {return m_name; की रेखा में कुछ था; } ... ' –
रुको, क्या आपने मिडटरम लिखा था? – tster
'कॉन्स चार कॉन्स 'में डबल कॉन्स सी 99 में मान्य है, लेकिन यह सी ++ में मान्य नहीं है। केवल एक कॉन्स की अनुमति है, लेकिन जिसे आप हटाते हैं, इससे कोई फर्क नहीं पड़ता। –