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 :
Voilou, donc le principe est de copier la liste des pointeurs de session présents dans une autre instance de la classe MaClass.
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
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++; } } }
_Session est déclaré comme ca : private: std::vector<Session*> _Session;.
L'erreur que j'ai est plutot illisible à cause des templates :
Elle se produit ligne 8, sur l'obtention de l'itérateur begin().error C2440: 'initialisation'*: impossible de convertir de 'std::_Vector_const_iterator<_Myvec>' en 'std::_Vector_iterator<_Myvec>'
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
(PS : Au cas où ca change quelque chose, je suis sous VS2010)
Partager