2011-12-28 18 views
9
class TConst 
{ 
    const int i; 
    int& ref; 
    public: 
    TConst(int n):i(n),ref(n){} 
    static void p1(){prn(i);}//error here 
}; 

मेरा संकलक static सदस्य-कार्य में const वर्ग सदस्य का उपयोग करने का प्रयास करते समय एक त्रुटि उत्पन्न करता है।हम स्थिर सदस्य कार्यों में कॉन्स सदस्यों का उपयोग क्यों नहीं कर सकते?

इसकी अनुमति क्यों नहीं है?

+1

कृपया आपको जो भी त्रुटि मिलती है उसे हमेशा पोस्ट करें। – orlp

+1

कॉन्स इंट अभी भी किसी वस्तु के लिए बाध्य है, वर्ग के लिए नहीं। – nullpotent

+1

एक स्थैतिक विधि में कोई वर्ग उदाहरण नहीं है इसलिए कोई वर्ग सदस्य नहीं हैं ... FYI आप इसे 'स्थिर कॉन्स int i = 42;' बना सकते हैं, यदि आप इसे इस तरह उपयोग करना चाहते हैं। – AJG85

उत्तर

6

const सदस्य ऑब्जेक्ट निर्माण के दौरान प्रारंभ किया गया है। static सदस्य ऑब्जेक्ट सृजन पर निर्भर नहीं हैं और this पॉइंटर तक पहुंच नहीं है इसलिए उन्हें नहीं पता कि आपका const सदस्य चर रहता है।

7

यह कार्य नहीं करेगा, भले ही वह const नहीं था:

error: a nonstatic member reference must be relative to a specific object 

स्टेटिक कार्यों गैर स्थिर सदस्य चर का उपयोग नहीं कर सकते हैं। ऐसा इसलिए है क्योंकि गैर स्थैतिक सदस्य चर क्लास ऑब्जेक्ट से संबंधित होना चाहिए, और स्थिर सदस्य फ़ंक्शंस के साथ काम करने के लिए कोई क्लास ऑब्जेक्ट नहीं है।

13

const का मतलब अलग-अलग चीजें हैं। इस मामले में, इसका मतलब है कि i प्रारंभ होने के बाद अपरिवर्तनीय है। यह का अर्थ यह एक शाब्दिक स्थिरांक है (जैसा कि मुझे विश्वास है कि आपको लगता है कि इसका मतलब है)। iTConst के विभिन्न उदाहरणों के लिए अलग हो सकता है, इसलिए यह तर्कसंगत है कि static विधियां इसका उपयोग नहीं कर सकती हैं।

+0

यह हमेशा इतना आसान है) धन्यवाद – Alexander

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

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