Opérateur surdéfini dans une fonction membre

Geoffrey -  
 Geoffrey -
Bonjour,

J'ai un problème que je n'arrive pas à résoudre dans un programme. Le voici (si vous avez besoin de plus d'informations sur le programme, dites-le moi car je ne vais pas l'écrire en entier ici) :

Après avoir déclaré une classe CPoint dont les données membres de type private sont : double m_x, double m_y et double m_z (il s'agit d'une classe permettant de créer des points de l'espace), j'ai surdéfini l'opérateur + comme suit :

CPoint CPoint :: operator + (CPoint &r_pointx)
{
CPoint point ;

point.m_x = (this->m_x + r_pointx.m_x) ;
point.m_y = (this->m_y + r_pointx.m_y) ;
point.m_z = (this->m_z + r_pointx.m_z) ;

return point ;
}

Cette fonction est bien évidemment une fonction membre. Lorsque je l'utilise dans la fonction main comme ci-dessous, cela fonctionne très bien :

CPoint point_somme = point_A + point_B ;

Mais je n'arrive pas à l'utiliser dans une fonction membre qui permet de calculer le point milieu d'un segment. Lorsque j'écris :

CPoint CPoint :: Point_milieu (CPoint &r_pointx) // Fonction retournant un objet de la classe CPoint
{
CPoint point = this-> + r_pointx ;

point.m_x /= 2. ;
point.m_y /= 2. ;
point.m_z /= 2. ;

return point ;
}

Le compilateur n'accepte pas l'instruction CPoint point = this-> + r_pointx ; et m'indique les erreurs suivantes :
error C2059: syntax error : '+'
error C2039: 'point' : is not a member of 'CPoint'

L'instruction CPoint point = this + r_pointx ; en lieu et place de celle ci-dessus ne fonctionne pas non plus et le compilateur me renvoit cette erreur :
error C2677: binary '+' : no global operator defined which takes type 'class CPoint' (or there is no acceptable conversion)

Voilà, est-ce que quelqu'un pourrait m'aider? Merci.

N.B. : je travaille avec Visual C++ 6.0 sous Windows XP
A voir également:

2 réponses

loupius Messages postés 789 Statut Membre 148
 
Pour un opérateur dyadique, on doit définir:
CPoint CPoint::operator+ (CPoint r_pointx)
Pour la fonction pointMilieu:
CPoint CPoint::pointMilieu (CPoint r_pointx)
{
  CPoint point = *this + r_pointx;
  point.m_x /= 2.;
  point.m_y /= 2.;
  point.m_z /= 2.;
  return point ;
}
Bonne continuation.
1
Profil bloqué
 
je confirme
0
Geoffrey
 
Je vous remercie beaucoup pour votre coup de main!

Cordialement,

Geoffrey
0