Paramètres de méthodes 'const'
Bonjour,
j'ai eu un petit souci avec une méthode. Je l'ai résolu mais je ne comprends pas comment... :mouarf:
Pour expliquer, voici mon code: (j'ai enlevé les include et tout ça...)
Dans main.cpp:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
void displayObj(const vector<myObject> &theObjects);
int main()
{
...
}
void displayObj(const vector<myObject> &theObjects)
{
for(unsigned int i(0); i < theObjects.size(); i++)
{
theObjects[i].afficher();
}
} |
Dans myObject.cpp
Code:
1 2 3 4 5
|
void myObject::afficher()
{
cout << "Nom : " << m_nom << ", Age : " << m_age << endl;
} |
Dans cette configuration là mon code ne compile pas. L'erreur est la suivante:
Code:
1 2
|
error: passing 'const Arme' as 'this' argument of 'void myObject::afficher()' discards qualifiers |
Et lorsque j'enlève le 'const' en paramètre de ma fonction displayObj, là je n'ai plus de problèmes! Mais je ne comprends pas pourquoi... :calim2:
Si certains ont une explication, merci :lol:
De l'importance d'être constant
Entre deux choix possibles, l'incompréhension conduit au mauvais :aie:
dsl
const accolé à une variable indique au compilateur que cette variable ne va pas être modifiée dans le scope où elle se trouve : pour un paramètre cela veut dire que le paramètre ne va pas être modifié : tu ne peux lui affecter une nouvelle valeur ou tu ne peux appeler que des fonctions constantes sur cet objet. Gérer la constance est important, cf ici et suivant.
Donc ta modif aurait du être :
Code:
void myObject::afficher() const
et laisser :
Code:
void displayObj(const vector<myObject> &theObjects);