39

我有一个名为 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

在 print 方法中的 2 people[i]下面有红线

我究竟做错了什么?

4

1 回答 1

52

getName不是 const,getScore不是 const,而是printis。使前两个 const 像print. 您不能使用 const 对象调用非常量方法。由于您的 Person 对象是其他类的直接成员,并且由于您处于 const 方法中,因此它们被视为 const。

一般来说,你应该考虑你编写的每一个方法,如果是这样,就将它声明为 const 。简单的 getter 喜欢getScore并且getName应该始终是 const。

于 2012-10-27T20:13:47.490 回答