IntelliSense: het object heeft typkwalificatoren die niet compatibel zijn met de lidfunctie

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%

getNameis niet const, getScoreis niet const, maar printis. 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 getScoreen getNamemoeten altijd constant zijn.

Other episodes