J'essaie de surcharger l'opérateur c ++ == mais je reçois des erreurs ...
erreur C2662: 'CombatEvent :: getType': ne peut pas convertir 'ce' pointeur de 'const CombatEvent' en 'CombatEvent &'
cette erreur est sur cette ligne
if (lhs.getType() == rhs.getType())
voir le code ci-dessous:
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;
}
quelqu'un peut-il aider?
CombatEventType getType();
doit être
CombatEventType getType() const;
Votre compilateur se plaint car la fonction reçoit un objet const
sur lequel vous essayez d'appeler une fonction non - const
. Lorsqu'une fonction obtient un objet const
, tous les appels à celle-ci doivent être const
dans toute la fonction (sinon le compilateur ne peut pas être sûr qu'il n'a pas été modifié).
changer la déclaration en:
CombatEventType getType() const;
vous pouvez uniquement appeler les membres 'const' par le biais de références à const.
C'est un problème de const, votre méthode getType n'est pas définie comme const mais vos arguments d'opérateur surchargés le sont. Étant donné que la méthode getType ne garantit pas qu'elle ne modifiera pas les données de classe, le compilateur génère une erreur car vous ne pouvez pas modifier un paramètre const;
La modification la plus simple consiste à remplacer la méthode getType par
CombatEventType getType() const;
À moins bien sûr que la méthode ne modifie réellement l'objet.