Les List en C++

Bonjour,

Voila mon problème.
J'apprends à utiliser les conteneurs list en C++, et pour cela j'ai codé un petit bout de programme sous Linux ( qui fonctionnait très bien ). Problème, chez moi, j'ai Seven, et quand je veux reprendre le TP, je me retrouve avec un plantage du programme à l'affichage de ma list.*
D'où pourrait provenir le problème à votre avis ?

Merci d'avance !!!

Voici mon code source :

#include <stdio.h>
#include <string.h>
#include <list>
#include <iostream>
using namespace std;

int main()
{
string trolol, biglol, masterlol;
list <string> listeTest;
list <string>::iterator IterateurListe;

cout << " ajout des elements : " << endl;
cin >> trolol; cin >> biglol; cin >> masterlol;
listeTest.push_back(trolol);
listeTest.push_back(biglol);
listeTest.push_back(masterlol);
cout << " Les elements on t il bien ete ajoutes ? " << endl;
advance (IterateurListe,1);
listeTest.erase(IterateurListe);
for (IterateurListe = listeTest.begin();IterateurListe!=listeTest.end();IterateurListe++)
{
cout << *IterateurListe << endl;
}
return 0;
}



4 réponses

  1. Recompile pour que ça fonctionne sous Windows.
    1. J'ai déjà recompilé, je vais publier mon code ça sera mieux
  2. Ah c'est bon en fait, c'est mon erase qui était mauvais, va savoir pourquoi ?
    Je vais tenter de refaire ça sous Seven,

    Merci quand même au gens qui on pris la peine de lire mon post et de commencer à chercher.
    1. Modérateur
      Chez moi j'ai ces erreurs à la compilation :
      error C2679: '>>' binaire : aucun opérateur trouvé qui accepte un opérande de partie droite de type 'std::string'
      error C2679: '<<' binaire : aucun opérateur trouvé qui accepte un opérande de partie droite de type 'std::basic_string<_Elem,_Traits,_Ax>'


      Remarque :
      Quand tu utilises advance (IterateurListe,1), IterateurListe n'est pas initialisé !
      Il est préferable d'utiliser les const_iterator autant que tu peux.
      1. Modérateur
        Note: mes erreurs de compilations viennent que tu as inclus <string.h> (C) au lieu de <string> (C++)
        Mais ton erreur est que tu dois initialiser IterateurListe avant de faire advance ou erase !
    2. Mhhh je vois ce n'est pas bête.

      Mais je ne vois pas comment utiliser le const_iterator.

      -> list <string>::const_iterator IterateurListe;

      Je l'ai remplacé dans ma déclaration et le compilo gueule.

      Mhh je vais essayer de voir la syntaxe.

      Merci en tout cas ;)
      1. Modérateur
        Voici une version de ton code qui fonctionne chez moi :

        #include <iostream>
        #include <string> // ne pas confondre avec "string.h"
        #include <list>
        
        int main()
        {
        	std::string trolol, biglol, masterlol;
        	std::list<std::string> listeTest;
        
        	std::cout << "Ajout des elements :" << std::endl;
        
        	std::cin >> trolol;
        	listeTest.push_back(trolol);
        
        	std::cin >> biglol;
        	listeTest.push_back(biglol);
        
        	std::cin >> masterlol;
        	listeTest.push_back(masterlol);
        
        	std::list<std::string>::const_iterator
        		IterateurListe = listeTest.begin(); // initialisation indispensable
        
        	std::advance(IterateurListe,1);
        	listeTest.erase(IterateurListe);
        
        	std::cout << std::endl;
        
        	for(IterateurListe = listeTest.begin();
        		IterateurListe!= listeTest.end();
        		IterateurListe++)
        		std::cout << *IterateurListe << std::endl;
        
        	return 0;
        }