私は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;
}
誰でも助けることができますか?
CombatEventType getType();
する必要があります
CombatEventType getType() const;
関数には、const
以外の関数を呼び出そうとしているconst
オブジェクトが与えられているため、コンパイラーは不平を言っています。関数がconst
オブジェクトを取得する場合、その関数へのすべての呼び出しは関数全体でconst
でなければなりません(そうでない場合、コンパイラは変更されていないことを確認できません)。
宣言を次のように変更します。
CombatEventType getType() const;
constへの参照を介してのみ 'const'メンバーを呼び出すことができます。
これはconstの問題です。getTypeメソッドはconstとして定義されていませんが、オーバーロードされた演算子引数は定義されています。 getTypeメソッドはクラスデータを変更しないことを保証していないため、constパラメーターを変更できないため、コンパイラーはエラーをスローしています。
最も簡単な変更は、getTypeメソッドを
CombatEventType getType() const;
もちろん、メソッドが実際にオブジェクトを変更していない限り。