Voici mon problème:
J'ai un J'ai ces deux Fonctions pour retourner les itérateurs: p> std :: vecteur
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
3 Réponses :
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
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.
Y a-t-il une façon de changer mes itérateurs afin que cela-> fonctionne? p>
Pas directement, mais vous pouvez faire quelque chose comme: p>
xxx pré> blockQquote>
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. P>
Vous pourrez peut-être utiliser un boost :: pTR_vector code> 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. P>
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 code>. Mais cela dépend de l'Agui, quoi que ce soit.
Vous êtes correct, ils sont auto-destructeurs