Ik heb een klasse met de naam:
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 een andere klasse heb ik deze 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;
}
Dit is de verklaring van mensen:
static const int size=8;
Person people[size];
Wanneer ik probeer het te compileren, krijg ik deze foutmelding:
IntelliSense: the object has type qualifiers that are not compatible with the member function
Met rode lijnen onder de 2 mensen [I] in de afdrukmethode
Wat doe ik verkeerd?
Antwoord 1, Autoriteit 100%
getName
is niet const, getScore
is niet const, maar print
is. Maak de eerste twee const als print
. U kunt geen niet-const-methode bellen met een COND-object. Aangezien uw persoonsobjecten directe leden van uw andere klasse zijn en omdat u in een const-methode bent, worden ze beschouwd als const.
Over het algemeen zou je elke methode die je schrijft moeten overwegen en deze als const declareren als dat is wat het is. Eenvoudige getters zoals getScore
en getName
moeten altijd constant zijn.