1. ホーム
  2. c++

[解決済み】IntelliSense:オブジェクトに、メンバー関数と互換性のない型修飾子がある

2022-01-21 13:46:18

質問

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

の下に赤い線が入っています。 ピープル[i] printメソッドで

何が間違っているのでしょうか?

どうすればいいですか?

getName が const になっていない。 getScore は const ではありませんが print です。最初の2つは次のように const にします。 print . constオブジェクトでconstでないメソッドを呼び出すことはできません。Person オブジェクトは他のクラスの直接のメンバーであり、const メソッドであるため、それらは const とみなされます。

一般的に、あなたが書いたすべてのメソッドを考慮し、それが何であるかであればconstを宣言する必要があります。のような単純なゲッターは getScoregetName は常にconstでなければなりません。