2012-10-27 2 views
15

Ich habe eine Klasse namens Person:IntelliSense: Das Objekt hat Qualifier geben, die nicht kompatibel mit der Member-Funktion sind

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(); 
}; 

In einer anderen Klasse, ich habe diese Methode:

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; 
} 

Dies ist die Erklärung der Menschen:

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

Wenn ich versuche, es zu kompilieren bekomme ich diesen Fehler:

IntelliSense: the object has type qualifiers that are not compatible with the member function 

mit roten Linien unter dem die 2 Menschen [i] in der Druckmethode

Was mache ich falsch?

+0

Was ist die Definition von 'Menschen'? Hat es irgendeinen "const" Qualifier? –

Antwort

20

getName ist nicht const, getScore ist nicht const, aber print ist. Machen Sie die ersten zwei Konstanten wie print. Sie können eine nichtkonstante Methode nicht mit einem konstanten Objekt aufrufen. Da Ihre Person-Objekte direkte Mitglieder Ihrer anderen Klasse sind und Sie sich in einer const-Methode befinden, werden sie als const betrachtet.

Im Allgemeinen sollten Sie jede Methode, die Sie schreiben, betrachten und es als const deklarieren, wenn es das ist, was es ist. Einfache Getter wie getScore und getName sollten immer const sein.

+0

Kannst du etwas dazu sagen: "Da deine Person-Objekte direkte Mitglieder deiner anderen Klasse sind und du in einer const-Methode bist, gelten sie als const" Danke! – Chin

+2

In Ihrer anderen Klasse haben Sie (ich nehme an) 'Person people [size];'. Das bedeutet, dass Sie innerhalb einer 'const' Methode Ihrer anderen Klasse das' people' Array nicht ändern dürfen, also zum Beispiel 'people [0] = x;' wäre illegal. Das Aufrufen einer nicht-konstanten "Person" -Methode ist nur eine weitere Möglichkeit, das 'people'-Array zu ändern, also wäre' people [0] .setScore (20.0); 'auch illegal. Da Sie 'Person :: getScore()' nicht als const deklariert haben, wusste der Compiler nicht, dass Sie nicht versucht haben, das 'people'-Array zu ändern, daher gab es einen Fehler. – john

+0

danke, ich bekomme es jetzt :) – Chin

Verwandte Themen