Twitter iPhone pliant OnePlus 12 PS5 Disney+ Orange Livebox Windows 11 ChatGPT

Surcharge de l'opérateur == et appel de méthode

3 réponses
Avatar
TSalm
Bonjour,

Je surcharge l'opérateur "==" ainsi :
bool Win::operator==(const Win &win2)
{
return getUID() == win2.getUID();
}

mais G++ me retourne cette erreur :
error: passing 'const winlist::Win' as 'this' argument of 'DWORD
winlist::Win::getUID()' discards qualifiers

Si je comprends bien ce message, je ne peux pas appeler de méthode getUID
sur win2 car il est "const". C'est bien ça ?
N'est-il pas possible d'appeler une méthode de win2 dans mon cas ?

A+
-TSalm

3 réponses

Avatar
Alain Ketterlin
TSalm writes:

Je surcharge l'opérateur "==" ainsi :
bool Win::operator==(const Win &win2)
{
return getUID() == win2.getUID();
}

mais G++ me retourne cette erreur :
error: passing 'const winlist::Win' as 'this' argument of 'DWORD
winlist::Win::getUID()' discards qualifiers

Si je comprends bien ce message, je ne peux pas appeler de méthode
getUID sur win2 car il est "const". C'est bien ça ?



Oui, et que getUID() risque de le modifier.

N'est-il pas possible d'appeler une méthode de win2 dans mon cas ?



Si bien sûr, à condition d'être sûr que la méthode appelée n'apporte
aucune modification à l'objet, c'est-à-dire que la méthode e st const.

-- Alain.
Avatar
Fabien LE LEZ
On Thu, 09 Jun 2011 22:57:09 +0200, TSalm :

bool Win::operator==(const Win &win2)
{
return getUID() == win2.getUID();



Normalement, operator== ne doit pas modifier l'objet dont il est
membre.
Il convient donc de le déclarer const :

bool Win::operator==(const Win &win2) const
{...}

Logiquement, la fonction membre getUID() se contente de renvoyer une
info, et ne modifie pas l'objet. Elle devrait donc aussi être déclarée
const. Ce qui résoudra probablement le problème.

Rajoute les "const" partout où ils manquent. Si ton code ne fonctionne
toujours pas, explique ce qu'est cette fonction getUID().
Avatar
TSalm
Le Thu, 09 Jun 2011 23:22:14 +0200, Fabien LE LEZ
a écrit:

On Thu, 09 Jun 2011 22:57:09 +0200, TSalm :

bool Win::operator==(const Win &win2)
{
return getUID() == win2.getUID();



Normalement, operator== ne doit pas modifier l'objet dont il est
membre.
Il convient donc de le déclarer const :

bool Win::operator==(const Win &win2) const
{...}

Logiquement, la fonction membre getUID() se contente de renvoyer une
info, et ne modifie pas l'objet. Elle devrait donc aussi être déclarée
const. Ce qui résoudra probablement le problème.

Rajoute les "const" partout où ils manquent. Si ton code ne fonctionne
toujours pas, explique ce qu'est cette fonction getUID().




C'est très logique. Merci de votre aide à tous les deux.