Il était très difficile de proposer un titre ... (Je ne suis pas un orateur anglais natif.) Ce code compile / fonctionne comme prévu, mais quand je change A = A + 2 à A = 2 + A, il ne compilera plus.
GCC me donne cette erreur: P> no match for âoperator+â in â2 + aâ
3 Réponses :
Vous avez besoin d'une fonction libre, définis après em> la classe aussi, vous pourriez envisager de définir a & opérateur + = (int i); Code> in
A code> une implémentation des deux versions de
opérateur + code> comme fonctions libres. Vous pouvez également être intéressé par Boost.Operateurs ou d'autres aides à simplifier
A code>, voir mon profil pour deux options. P> p>
Fonctionne parfaitement! J'ai oublié de faire l'opérateur + dans un const, je vais le réparer maintenant.
Bien sûr, définissez l'opérateur inverse en dehors de la classe:
struct A { int value; A operator+(int i) const { A a; a.value=value+i; return a; }; }; //marked inline to prevent a multiple definition inline A operator+(int i, const A& a) { return a + i; }
Les autres réponses ici fonctionnent bien. Cependant, une autre option que vous avez consiste à créer un constructeur pour un seul ceci permet aux entiers d'obtenir implicitement converti et vous permet de surcharger uniquement opérateurs pour votre Bien sûr, cela permet à tous les entiers d'être convertis implicitement en int code> comme ceci:
struct code> à la place: p>
A code> S , qui peut ou non être souhaitable. p> p>