30

C++ operator== をオーバーロードしようとしていますが、いくつかのエラーが発生しています...

エラー C2662: 'CombatEvent::getType': 'this' ポインターを 'const CombatEvent' から 'CombatEvent &' に変換できません

このエラーはこの行にあります

if (lhs.getType() == rhs.getType())

以下のコードを参照してください。

class CombatEvent {

public:
    CombatEvent(void);
    ~CombatEvent(void);

    enum CombatEventType {
        AttackingType,
        ...
        LowResourcesType
    };

    CombatEventType getType();
    BaseAgent* getAgent();

    friend bool operator<(const CombatEvent& lhs, const CombatEvent& rhs) {

        if (lhs.getType() == rhs.getType())
            return true;

        return false;
    }

    friend bool operator==(const CombatEvent& lhs, const CombatEvent& rhs) {

        if (lhs.getType() == rhs.getType())
            return true;

        return false;
    }

private: 
    UnitType unitType;
}

誰でも助けることができますか?

4

4 に答える 4

66
CombatEventType getType();

する必要があります

CombatEventType getType() const;

非関数constを呼び出そうとしているオブジェクトが関数に与えられているため、コンパイラは不平を言っています。const関数がconstオブジェクトを取得するとき、そのオブジェクトへのすべての呼び出しはconst、関数全体で行う必要があります (そうしないと、コンパイラはオブジェクトが変更されていないことを確認できません)。

于 2012-08-22T07:36:44.657 に答える
8

宣言を次のように変更します。

CombatEventType getType() const;

const への参照を通じてのみ「const」メンバーを呼び出すことができます。

于 2012-08-22T07:36:54.183 に答える
5

これは const の問題です。getType メソッドは const として定義されていませんが、オーバーロードされた演算子の引数は const として定義されています。getType メソッドは、クラス データが変更されないことを保証していないため、const パラメータを変更できないため、コンパイラはエラーをスローしています。

最も簡単な変更は、getType メソッドを次のように変更することです。

CombatEventType getType() const;

もちろん、メソッドが実際にオブジェクトを変更している場合を除きます。

于 2012-08-22T07:46:33.280 に答える