problème avec <vector>,operator= et membre de classe 'const'
Bonsoir,
J'aimerais stocker dans un <vector> des objets CVecteur. Voici le patron de ma classe:
Code:
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:
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:
Citation:
/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:
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 ?