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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
std::vector <std::unique_ptr<Fenetre> > vPfenetre
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)

Si je code comme suit :
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();
                }
            }
ça compile et fonctionne comme espéré.

mais si je code avec un itérator comme suit :
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();
                }
            }
Le compilateur me dit :
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.