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).