Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

c++ error C2662 cannot convert 'this' pointer from 'const Type' to 'Type &'

I am trying to overload the c++ operator== but im getting some errors...

error C2662: 'CombatEvent::getType' : cannot convert 'this' pointer from 'const CombatEvent' to 'CombatEvent &'

this error is at this line

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

see the code bellow:

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

can anybody help?

like image 890
thiagoh Avatar asked Aug 22 '12 07:08

thiagoh


2 Answers

CombatEventType getType(); 

needs to be

CombatEventType getType() const; 

Your compiler is complaining because the function is being given a const object that you're trying to call a non-const function on. When a function gets a const object, all calls to it have to be const throughout the function (otherwise the compiler can't be sure that it hasn't been modified).

like image 157
hcarver Avatar answered Sep 28 '22 06:09

hcarver


change the declaration to :

CombatEventType getType() const; 

you can only call 'const' members trough references to const.

like image 44
Andrzej Avatar answered Sep 28 '22 08:09

Andrzej