2010-04-12 6 views
11

पर संदर्भ संदर्भ मेरे पास कक्षा foo का निम्न सदस्य है।कक्षा से इस

foo &foo::bar() 
{ 
    return this; 
} 

लेकिन मुझे कंपाइलर त्रुटियां मिल रही हैं। मैं क्या बेवकूफ बात कर रहा हूँ?

संकलक त्रुटि (जीसीसी): त्रुटि: प्रकार की 'foo * स्थिरांक'

उत्तर

21

this एक अस्थायी से प्रकार 'foo &' के गैर स्थिरांक संदर्भ की अवैध प्रारंभ सूचक है। तो यह return *this;

+0

धन्यवाद मुझे यह पता होना चाहिए कि त्वरित टिप के लिए :) – Thomas

6

जैसा कि नवीन बताता है, आपको *this वापस करने की आवश्यकता है।

बस एक त्वरित टिप हालांकि: यह पता लगाने का एक तरीका है कि कुछ हद तक अस्पष्ट कंपाइलर त्रुटियों का मतलब यह है कि एक बेहतर संदेश देखने के लिए एक अलग कंपाइलर पर संकलन करने का प्रयास करना है। उदाहरण के लिए, आप Comeau online का उपयोग कर सकते हैं।

इस मामले में यह देता है:

"ComeauTest.c", line 7: error: initial value of reference to non-const must be an 
      lvalue 
    return this; 
      ^

नहीं यकीन है कि यह इस मामले में बेहतर है - लेकिन कुछ मामलों में संदेशों तरह से बेहतर हैं।

+0

+1। यह वास्तव में स्पष्ट हो सकता है। – Francesco

+1

वास्तव में, एमएसवीसी 2008 रिटर्न, "त्रुटि C2440: 'वापसी': 'foo * const' से 'foo &' 'में परिवर्तित नहीं हो सकता है, जो मुझे लगता है कि यह स्पष्ट है। –