1

Bon je comprend pas.. je voulais surcharger l'operateur un * pour pouvoir multiplier un CVectoir par un scalaire (de type float):
CVector operator*(const float Nbr);
CVector CVector:embarrassedperator*(const float Nbr)
{
CVector Tmp=*this;
Tmp.x*= Nbr;
Tmp.y*= Nbr;
Tmp.z*= Nbr;
return Tmp;
}
dans le code j'ai alors:
float a=2.0f;
V1 =a*V2;
et j'obtiens:
error C2677: binary '*' : no global operator defined which takes type 'class CVector' (or there is no acceptable conversion)

Comment faut il pour surcharger l'operateur * dans CE cas la?
merci

2

solution:
friend CVector operator*(const float _Nbr,const CVector &_Vector);

3

De manière générale les opérateurs binaires se mettent en fonction externe, les opérateurs unaires et les affectations en fonctions membres.

Cela dit c'est pas une obligation stricte mais juste une convention. Le problème de ton code au post ./1 c'est qu'il définissait l'opérateur * qui prenait un CVector à gauche et un float à droite, alors que tu lui passais le contraire (une des raisons pour laquelle on utilise la convention que j'ai décrite juste au dessus est d'éviter ce type de problème).

Si tu définis l'opération multiplication float par vecteur, tu devrais définir au moins les opérateurs suivants (question de propreté du code) :

CVector operator*(const float _Nbr,const CVector &_Vector);
CVector operator*(const CVector &_Vector, const float _Nbr);
CVector & operator*=(const float _Nbr);