2012-10-27 3 views
15

मैं एक वर्ग व्यक्ति कहा जाता है:IntelliSense: क्वालिफायर कि सदस्य समारोह साथ संगत नहीं हैं टाइप वस्तु है

void print() const { 
    for (int i=0; i< nPlayers; i++) 
     cout << "#" << i << ": " << people[i].getScore()//people is an array of person objects 
    << " " << people[i].getName() << endl; 
} 

यह वह जगह है:

class Person { 
    string name; 
    long score; 
public: 
    Person(string name="", long score=0); 
    void setName(string name); 
    void setScore(long score); 
    string getName(); 
    long getScore(); 
}; 

अन्य वर्ग में, मैं इस विधि का उपयोग लोगों की घोषणा:

static const int size=8; 
    Person people[size]; 

जब मैं कोशिश यह संकलित करने के लिए मैं इस त्रुटि मिलती है:

IntelliSense: the object has type qualifiers that are not compatible with the member function 
प्रिंट विधि

क्या मैं गलत कर रहा हूँ में के तहत 2 लोग [i] लाल लाइनों के साथ

?

+0

'लोगों' की परिभाषा क्या है? क्या इसमें कहीं भी 'कॉन्स' क्वालीफायर हैं? –

उत्तर

20

getName कॉन्स नहीं है, getScore स्थिर नहीं है, लेकिन print है। पहले दो कॉन्स को print बनाएं। आप एक कॉन्स ऑब्जेक्ट के साथ एक गैर-कॉन्स्ट विधि को कॉल नहीं कर सकते हैं। चूंकि आपकी व्यक्ति वस्तुएं आपकी दूसरी कक्षा के प्रत्यक्ष सदस्य हैं और चूंकि आप एक कॉन्स्ट विधि में हैं, इसलिए उन्हें कॉन्स माना जाता है।

आम तौर पर आपको लिखने वाली हर विधि पर विचार करना चाहिए और यदि यह वही है तो इसे स्थिर करें। getScore और getName जैसे साधारण गेटर्स हमेशा स्थिर होना चाहिए।

+0

क्या आप इसके बारे में कुछ समझ सकते हैं: "चूंकि आपकी व्यक्ति वस्तुएं आपकी दूसरी कक्षा के प्रत्यक्ष सदस्य हैं और चूंकि आप एक कॉन्स्ट विधि में हैं, इसलिए उन्हें" कॉन्स "माना जाता है! – Chin

+2

आपकी दूसरी कक्षा में आपके पास (मुझे लगता है) 'व्यक्ति लोग [आकार]; '। इसका मतलब है कि आपकी दूसरी कक्षा के 'कॉन्स्ट' विधि के भीतर आपको' लोगों 'सरणी को बदलने की अनुमति नहीं है, इसलिए उदाहरण के लिए' लोग [0] = x; 'अवैध होगा। गैर-कॉन्स 'व्यक्ति' विधि को कॉल करना 'लोगों' सरणी को बदलने का एक और तरीका है, इसलिए 'लोग [0] .setScore (20.0); 'भी अवैध होगा। चूंकि आपने 'व्यक्ति :: getScore() 'को कॉन्सलर के रूप में घोषित नहीं किया है क्योंकि संकलक को यह नहीं पता था कि आप' लोगों 'सरणी को बदलने की कोशिश नहीं कर रहे थे, इसलिए यह एक त्रुटि हुई। – john

+0

धन्यवाद, मुझे अब मिल गया :) – Chin