tipos punteros puntero ejemplo dev declaracion datos conversion cadenas aritmetica apuntadores c++ operator-overloading syntax-error friend-function

punteros - c++ error C2662 no puede convertir ''este'' puntero de ''tipo const'' a ''tipo &''



puntero a puntero (3)

Estoy intentando sobrecargar el operador c ++ == pero estoy obteniendo algunos errores ...

error C2662: ''CombatEvent :: getType'': no ​​se puede convertir este puntero de ''const CombatEvent'' a ''CombatEvent &''

este error esta en esta linea

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

ver el código abajo:

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

¿Alguien puede ayudar?


Cambie la declaración a:

CombatEventType getType() const;

solo se pueden llamar miembros ''const'' a través de referencias a const.


Es un problema constante, su método getType no se define como const, pero sí los argumentos de operador sobrecargados. Debido a que el método getType no garantiza que no cambiará los datos de clase, el compilador está generando un error ya que no puede cambiar un parámetro const;

El cambio más simple es cambiar el método getType para

CombatEventType getType() const;

A menos que, por supuesto, el método realmente esté cambiando el objeto.


CombatEventType getType();

necesita ser

CombatEventType getType() const;

Su compilador se está quejando porque a la función se le está const un objeto const que está intentando llamar una función no const . Cuando una función obtiene un objeto const , todas las llamadas deben ser const largo de la función (de lo contrario, el compilador no puede estar seguro de que no se haya modificado).