IntelliSense: объект имеет классификаторы типов, которые не совместимы с функцией-членом

У меня есть класс Person:

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

В другом классе у меня есть этот метод:

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

Это декларация людей:

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

Когда я пытаюсь скомпилировать его, я получаю эту ошибку:

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

с красными линиями под 2 людьми [i] в методе печати

Что я делаю неправильно?

Ответы

Ответ 1

getName не const, getScore не const, но print is. Сделайте первые два константы такими, как print. Вы не можете вызвать метод non-const с объектом const. Поскольку ваши объекты Person являются непосредственными членами вашего другого класса, и поскольку вы находитесь в методе const, они считаются const.

В общем, вы должны рассмотреть каждый метод, который вы пишете, и объявить его const, если это то, что оно есть. Простые геттеры, такие как getScore и getName, всегда должны быть const.