Considérons le code suivant:Question sur la surcharge opérateur +
class A
{
public:
A& operator=(const A&);
const A& operator+(const A&);
const A& operator+(int m);
};
int main()
{
A a;
a = (a + a) + 5; // error: binary '+' : no operator found which takes a left-hand operand of type 'const A'
}
Quelqu'un peut-il expliquer pourquoi ce qui précède est retourné comme une erreur?
"(a + a)
" appelle "const A& operator+(const A&)
" et renvoie une référence constante qui est ensuite passée à "const A& operator+(int m)
" si je ne me trompe pas. Comment résoudre l'erreur ci-dessus (sans créer un opérateur binaire global + ou un constructeur acceptant un int) de telle sorte que l'instruction main()
est autorisée?
Merci pour toutes les explications. Je sais ci-dessus n'est pas la meilleure façon d'implémenter les opérateurs mais je me demandais juste pourquoi le compilateur se plaint dans le code ci-dessus. – jasonline