2012-08-22 52 views
21

我試圖重載C++運算符==但即時得到一些錯誤......C++錯誤C2662無法從「const型」轉變「這個」指針「類型和」

錯誤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; 
} 

任何人都可以幫忙嗎?

回答

49
CombatEventType getType(); 

必須

CombatEventType getType() const; 

你的編譯器是抱怨,因爲函數報錯,說你想呼籲非const功能的const對象。當一個函數獲得const對象時,所有對它的調用都必須是const,否則編譯器無法確定它沒有被修改。

+1

非常聰明。花了我幾分鐘的時間來完全理解這個想法。非常感謝。 –

6

變化的聲明:

CombatEventType getType() const; 

,你只能叫「常量」成員低谷引用常量。

5

這是一個常量問題,你的getType方法沒有被定義爲const,而是你的重載操作符參數是。由於getType方法不能保證它不會更改類數據,所以編譯器會拋出一個錯誤,因爲您無法更改const參數;

最簡單的改變是改變對GetType方法

CombatEventType getType() const; 

當然,除非該方法被實際改變的對象。

相關問題