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.