Surcharge C++

Résolu/Fermé
guadoc Messages postés 70 Date d'inscription mercredi 26 mai 2010 Statut Membre Dernière intervention 21 octobre 2011 - 30 nov. 2010 à 15:35
Char Snipeur Messages postés 9688 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 2 octobre 2020 - 1 déc. 2010 à 08:18
Bonjour,
Je programme en C++ et j'essaie de surcharger un opérateur.
Voici le code de la surcharge:

bool Valeur::operator<=(const Valeur &val){
int vv=val.value();
if (this->value()<=vv){
return true;
}
else{
return false;
}
}


La fonction value a été implémentée comme membre de la classe Valeur (public) et renvoie un int.
Le compilateur me renvoie un erreur que je ne comprend pas:

error C2662: 'Valeur::value' : impossible de convertir un pointeur 'this' de 'const Valeur' en 'Valeur &'

Pouvez vous m'expliquer ce qui ne fonctionne pas?
Je vous remercie d'avance pour vos contributions.

2 réponses

Char Snipeur Messages postés 9688 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 2 octobre 2020 1 328
30 nov. 2010 à 16:09
essai de mettre value() à la place de this->value(). Peut être qu'il se mélange les pinceaux avec les symboles.
Sinon, ça viens de value().
Si tu appelles l'opérateur <= avec une Valeur constante et que value n'est pas déclaré const, il peut y avoir un problème. Dans Valeur, il faut faire :
class Valeur
{
    ...
    int& value();
    const int value()const;
    ...
};
Je pense qu'il te manque le deuxième. (le premier n'est pas nécessaire)
0
guadoc Messages postés 70 Date d'inscription mercredi 26 mai 2010 Statut Membre Dernière intervention 21 octobre 2011 5
30 nov. 2010 à 16:52
Merci.
J'avais le deuxième problème que tu as proposé.
J'ai enlevé le const dans la définition de la surcharge pour des raisons pratiques.
J'espère que ça ne pose pas de problème.
Merci beaucoup en tout cas ça m'a bien débloqué.
0
Char Snipeur Messages postés 9688 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 2 octobre 2020 1 328
1 déc. 2010 à 08:18
ça peut poser problème si tu fait l'opération sur une classe Valeur constante. C'est pour ça que le plus propre c'est de mettre en const un certain nombre de méthodes.
0