const et vecto<T>.begin()
Bien le bonjour,
J'ai un petit problème et je vois pas trop comment m'en sortir proprement.
Petit bout de code pour être plus clair :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| void MaClass::CopySessions(const MaClass& source)
{
_Sessions.clear();
int count = source._Sessions.size();
if(count)
{
_Sessions.resize(count);
std::vector<Session*>::iterator it = source._Sessions.begin();
std::vector<Session*>::const_iterator itEnd = source._Sessions.end();
while(it != itEnd)
{
_Sessions.push_back(*it);
it++;
}
}
} |
Voilou, donc le principe est de copier la liste des pointeurs de session présents dans une autre instance de la classe MaClass.
_Session est déclaré comme ca : private: std::vector<Session*> _Session;.
L'erreur que j'ai est plutot illisible à cause des templates :
error C2440: 'initialisation'*: impossible de convertir de 'std::_Vector_const_iterator<_Myvec>' en 'std::_Vector_iterator<_Myvec>'
Elle se produit ligne 8, sur l'obtention de l'itérateur begin().
Donc a ce que je comprend c'est parce que le paramètre de la fonction est déclaré const et du coup le compilo détecte que je vais itérer dans le vecteur pour y faire des changements.
Comment lui faire comprendre que je ne fais que lire, il n'y a pas de modification du vecteur source et donc le paramètre est bien constant ?
Je pourrais évidemment virer le mot clef 'const' mais je préfèrerai le garder, il est tout de même sensé indiquer aux autres devs que la fonction ne touche pas à la source ce qui est très important a mon sens.
Merci pour vos réponses :ccool:
(PS : Au cas où ca change quelque chose, je suis sous VS2010)