2010-04-12 6 views
2

Ce que je veux faire estliste des pointeurs en C++

for (list<cPacket *>::iterator i = cache.begin(); i != cache.end(); i++){ 
     if(strcmp(i->getName(),id) == 0){ 
      return true; 
     } 
} 

getName est fonction de la classe cPacket, mais cela ne fonctionne pas, je tente également i.operator->()->getName(), et encore rien.

Quelqu'un peut-il m'aider?

+1

@Fred, je viens de regarder sur vos modifications. Il n'a pas quel est le problème (en plus de vaguement "ne pas fonctionner"), et vous avez corrigé un problème de compilateur en changeant 'list :: itérateur' en' list :: itérateur' en éditant son code. Cela n'aurait-il pas été mieux de faire une réponse? –

+1

Je n'ai rien changé de tel. Les arguments de modèle ne sont pas affichés car le code n'a pas été formaté et ils ont été supprimés en tant que code HTML incorrect. Regardez la source de l'édition originale. Tout ce que j'ai fait était le formatage du code. –

Répondre

8
(*i)->getName() 

est ce que vous cherchez.

+0

Cela ne fonctionnera toujours pas sans une distribution. – sblom

+1

oui, merci beaucoup. Pouvez-vous me dire ce que (* i) signifie exactrly – pavlos

+2

@pavlos: Vous pouvez penser à l'itérateur comme un pointeur vers un élément de votre conteneur. Mais dans ce cas, les éléments dans le conteneur sont des pointeurs. '(* i)' vous donnera le pointeur de votre conteneur, et alors vous pouvez utiliser '-> getName()' pour appeler la fonction sur l'objet vers lequel il pointe. –

6

*i déréférences l'itérateur. Comme le type de données de la liste est pointer to cPacket, vous devez appliquer l'opérateur -> pour accéder à ses membres. Parenthèses sont nécessaires pour precendence bon:

(*i)->whatever() 
-3

remplacer

list<cPacket *>::iterator i 

avec

list<cPacket>*::iterator i 
+0

Le type 'list * :: iterator' est syntaxiquement illégal, sans parler du fait qu'il n'est pas équivalent au type de retour de' cache.begin() 'et' cache.end() '. C'est deux raisons pour lesquelles il ne compilera pas. –