Bonjour la comunauté,
DSL pour le style télégraphique du titre, je n'ai pas trouvé plus explicite...
J'ai un vector qui contient des pointeurs std::unique_ptr pointant sur des objets de la classe Fenetre :
Je voudrais accéder à la methode getType() de la classe Fenetre qui me renvoie un typeFenetre (enum class Public déclaré dans la classe Fenetre)
Code : Sélectionner tout - Visualiser dans une fenêtre à part std::vector <std::unique_ptr<Fenetre> > vPfenetre
Si je code comme suit :
ça compile et fonctionne comme espéré.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 for(unsigned int i(0); i < m_vPfenetre.size(); ++i) { if(vPfenetre[i] -> getType() == Fenetre::typeFenetre::fCarte) { // fait des trucs i = vPfenetre.size(); } }
mais si je code avec un itérator comme suit :
Le compilateur me dit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 for(auto it = vPfenetre.begin(); it != vPfenetre.end(); ++it) { if (*it -> getType() == Fenetre::typeFenetre::fCarte) // it ou *it renvoie le même message d'erreur { // fait des trucs it = vPfenetre.end(); } }
error: 'class std::unique_ptr<Fenetre>' has no member named 'getType'
Je ne comprends pas : *it ne déréférence t-il pas le pointeur itéré de vPfenetre qui accéde à la méthode getType() de la classe Fenetre via l'opérateur -> comme vPfenetre[i] dans le premier cas ?
J'ai potentiellement quelques cas similaires et j'aimerais bien comprendre l'utilisation des itérators avant de travailler ces autres cas.
Rick.
Partager