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 : 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++;
		}
	}
}
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

(PS : Au cas où ca change quelque chose, je suis sous VS2010)