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 ではありません、const でgetScoreはありませんが、printです。最初の 2 つの const を のようにしprintます。const オブジェクトを使用して非 const メソッドを呼び出すことはできません。Person オブジェクトは他のクラスの直接のメンバーであり、const メソッドにいるため、const と見なされます。

一般に、作成するすべてのメソッドを検討し、それが const である場合は const と宣言する必要があります。単純なゲッターは常に const である必要がありますgetScoregetName

于 2012-10-27T20:13:47.490 に答える