7
votes

Itérateur pour vecteur de pointeurs pas latéraison correctement

Voici mon problème:

J'ai un std :: vecteur code> qui est utilisé pour garder une trace des contrôles d'enfants. P>

J'ai ces deux Fonctions pour retourner les itérateurs: p>

Error   3   error C2039: 'setText' : is not a member of 'std::_Vector_const_iterator<_Ty,_Alloc>'   c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\main.cpp   112
Error   2   error C2839: invalid return type 'AguiWidgetBase *const *' for overloaded 'operator ->' c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\main.cpp   112


2 commentaires

Si Agui travaille comme la plupart des autres cadres d'interface graphique, ces widgets sont destructions de soi. Ce serait alors une très mauvaise idée d'utiliser partagé_ptr . Mais cela dépend de l'Agui, quoi que ce soit.


Vous êtes correct, ils sont auto-destructeurs


3 Réponses :


24
votes

Parce qu'un itérateur agit comme un pointeur, et dans ce cas, un pointeur à un pointeur em>.

Vous auriez besoin de: p>

(*it)->setText("Hello World"); // dereference iterator, dereference pointer


2 commentaires

Ce n'est pas l'itérateur. C'est parce que le vecteur est un vecteur des pointeurs. La déséroferience L'itérateur vous donne une fois un pointeur à un widgetbase ague, que vous devez à nouveau la désarférence à utiliser.


@Milo: Pas facilement, non. Vous pouvez faire votre propre itérateur.



5
votes

Y a-t-il une façon de changer mes itérateurs afin que cela-> fonctionne?

Pas directement, mais vous pouvez faire quelque chose comme: xxx


0 commentaires

0
votes

Comme d'autres l'ont noté, c'est parce que les objets stockés dans votre vecteur sont des pointeurs, vous avez donc un niveau supplémentaire d'indirection aux objets réels.

Vous pourrez peut-être utiliser un boost :: pTR_vector pour collecter les aguiwidygets par pointeur mais travailler avec eux comme si elles sont stockées par valeur? Je ne l'ai pas utilisé de manière approfondie mais mon souvenir vague est que cela fonctionne de cette façon.


0 commentaires