Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2774 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  erreur itérateur

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

erreur itérateur

n°1264046
mick8569
Posté le 11-12-2005 à 17:53:06  profilanswer
 

Salut à tous, j'utilise un itérateur sur un vector mais j'ai une erreur, voici mon code :
 

Code :
  1. for (iterListFich i = laListe.begin(); i != laListe.end(); i++)
  2. {
  3.     cpt++;
  4.        
  5.     Flot F(*i);
  6.        
  7.     if ( F.ValideFlot() )
  8.     {
  9.         temp = F.LireMot();
  10.         while (temp != "" )
  11.         {
  12.             C.Add ( temp, cpt, F.NumLigne() );
  13.             temp = F.LireMot();
  14.         }
  15.     }
  16.     else
  17.     {
  18.         cout << "le Fichier " << *i << " n'est pas accessible ";
  19.         cout << "en lecture.";
  20.     }
  21.     F.FermerFlot();
  22. }


 
*iterListFich est un typedef défini comme ceci dans une classe que j'utilise :
 

Code :
  1. typedef vector <string> listeFichiers;
  2. typedef listeFichiers::iterator iterListFich;


 
et l'erreur qu'il me met (sous visual studio) :
 
error C2040: 'i' : 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > *' differs in levels of indirection from 'int'
 
Il me dit que cette erreur vient de la ligne du for (for (iterListFich i = laListe.begin(); i != laListe.end(); i++))
 
Voila si quelqu'un peut m'aider ce serait bien sympa parce que moi je suis un peu perdu....

mood
Publicité
Posté le 11-12-2005 à 17:53:06  profilanswer
 

n°1264055
++fab
victime du syndrome IH
Posté le 11-12-2005 à 18:06:47  profilanswer
 

Quel est le type de laListe ?

n°1264056
mick8569
Posté le 11-12-2005 à 18:11:05  profilanswer
 

vector<string> laListe

n°1264058
++fab
victime du syndrome IH
Posté le 11-12-2005 à 18:23:46  profilanswer
 

Code :
  1. #include <string>
  2. #include <vector>
  3. using std::string;
  4. using std::vector;
  5. typedef vector <string> listeFichiers;
  6. typedef listeFichiers::iterator iterListFich;
  7. int main()
  8. {
  9.     listeFichiers laListe;
  10.     for( iterListFich i = laListe.begin(); i != laListe.end(); ++i )
  11.     {
  12. //...
  13.     }
  14. }


 
Part de ce code minimal, et étoffe ton code, tu verras apparaitre l'erreur plus facilement.


Message édité par ++fab le 11-12-2005 à 18:24:13
n°1264061
mick8569
Posté le 11-12-2005 à 18:29:01  profilanswer
 

c'est bon j'ai vu d'ou venait l'erreur
c'est parce que dans un autre bloc (dans un for) je définis un int i :  
 

Code :
  1. for (int i; ... )
  2. {
  3. }
  4. iterListFich i;

n°1264074
++fab
victime du syndrome IH
Posté le 11-12-2005 à 18:36:42  profilanswer
 

en plus c'est ce que je pensais. C'est un bug bien connu de ton compilo qui se vautre sur la portée des variables de boucle.

n°1270139
Malkav
Posté le 19-12-2005 à 17:54:23  profilanswer
 

yep et ton compilo est donc Visual C++ ;)
 
Sinon petites remarques en passant :  
-> n'utilise jamais 'i' comme nom de variable pour un itérateur, utilise plutot 'it' ou un nom plus explicite. (c'est pour la lecture du code)
 
-> utilise des const_iterator plutot que des iterators lorsque tu parcours un liste/map/vector/set sans modifier les éléments (plus rapide et évite de modifier un élément par mégarde, c'est valable pour tout 'const' d'ailleurs)
 
-> utilise la préincrémentation (++it) plutot que la post inc (it++), c'est une bonne habitude et tu gagneras qq cycles (sur les objets, tels que les itérateurs tu gagnes une allocation et parfois un appel de fonction si l'opérateur n'est pas inline)
 
En utilisant toutes ses suggestions voici ton code :
 

Code :
  1. typedef vector <string> listeFichiers;
  2. typedef listeFichiers::const_iterator constIterListFich;
  3. constIterListFich it;
  4. const constIterListFich itEnd = laListe.end();
  5. for ( it = laListe.begin() ; it != itEnd ; ++it )
  6. {
  7.     ++cpt;
  8.   ...... etc
  9. }


Message édité par Malkav le 19-12-2005 à 17:56:23
n°1270141
theShockWa​ve
I work at a firm named Koslow
Posté le 19-12-2005 à 17:57:15  profilanswer
 

pour le compilo en question, s'il s'agit de Visual C++ .NET (7.0) ou .NET 2003 (7.1), alors ce problème de compatibilité peut être résolu via une option à passer au compilateur (regarde dans la configuration de ton projet)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  erreur itérateur

 

Sujets relatifs
[PHP] Formulaire qui se reremplit si erreurErreur avec PHP5+Domxml_pen_file
Avatars phpbb erreur d'affichage[Résolu] Numéro d'erreur de listing de répertoire ?
Code VBA permettant de supprimer un faux message d'erreur[VBA-EXCEL2003] incompatibilité de type erreur 13
[fortran:idb] message d'erreur bizarre!![GLUT] erreur bizarre au lancement du programme
Erreur avec Librairie GDerreur avec wsdl et php nusoap
Plus de sujets relatifs à : erreur itérateur


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)