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>