Bonsoir,
J'aimerais stocker dans un <vector> des objets CVecteur. Voici le patron de ma classe:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class CVecteur
{
    public:
    //constructeur et destructeur
   /.../
    //surcharges
    CVecteur& operator=(const CVecteur&);
    /.../
    protected:
    const int m_x;
    const int m_y;
    int m_xtemp;
    int m_ytemp;
};
Tout d'abord le compilateur m'a demandé de surcharger operator=. Ce que j'ai fait comme suit:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
CVecteur& CVecteur::operator=(const CVecteur& v)
{
    m_x=v._x();m_y=v._y();
    m_xtemp=v._xtemp();m_ytemp=v._ytemp();
    return *this;
}
Mais une fois operator= implementé, le compilateur m'annonce:
/home/.../CVecteur.cc||In member function ‘CVecteur& CVecteur::operator=(const CVecteur&)’
/home/.../CVecteur.cc|10|erreur: assignment of read-only data-member ‘CVecteur::m_x’|
/home/.../CVecteur.cc|10|erreur: assignment of read-only data-member ‘CVecteur::m_y’|
J'ai donc été contraint de supprimer les 'const' pour que ça passe.
- Y-a-t'il un moyen de contourner cela? J'aimerais malgré tout que ces membres restent 'const'
- Dans un fichier d'en tête "constantes.h" j'ai également déclaré des "CVecteur" comme suit:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
//vecteurs type
static const CVecteur FOU1=CVecteur(1,1);
static const CVecteur FOU2=CVecteur(1,-1);
static const CVecteur FOU3=CVecteur(-1,-1);
/.../
Cela sert-il à quelque chose de déclarer des objets d'une classe 'const' sachant que ces mêmes objets possèdent des fonctions susceptibles de modifier les valeurs de certains de leurs membres ?