IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Problème avec <list> itérateur


Sujet :

C++

  1. #1
    Nouveau membre du Club Avatar de yanchasp
    Inscrit en
    Décembre 2005
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 66
    Points : 26
    Points
    26
    Par défaut Problème avec <list> itérateur
    salut voila j'ai voulu reprendre un code, j'ai installé dev C++ sur mon portable et un code qui fonctionnait bien ne marche plus.

    main.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    #include <cstdlib>
    #include <iostream>
    #include <list>
    #include <string>
    #include "Personne.h"
     
    using namespace std;
     
    int main(int argc, char *argv[])
    {
    	//declaration
    	Collection MaCollection;
    	Personne MaPersonne;
    	int i;
     
    	string Nom[3]={"test1","test2","test3"};
    	string Prenom[3]={"le","la","les"};
    	int Age[3]={25,21,22};
     
    /*---- en automatique ------*/	
    	for (i=0;i<3;i++){
    		MaPersonne.setNom(Nom[i]);
    		MaPersonne.setPrenom(Prenom[i]);
    		MaPersonne.setAge(Age[i]);
    		//Ajout
    		MaCollection.AjoutPersonne(MaPersonne);//on ajoute la personne dans la collection
    		MaCollection.NbPersonne();// On rajoute une personne au total
    		}
     
    /*--- Affichage --*/	
    	cout<<"Il y a : "<<MaCollection.getNbPersonnes()<<" personne(s) dans ma collection"<<endl<<endl;
    	//cout<<MaCollection[0].getNom();
     
    	MaCollection.Parcourir();
     
    	MaCollection.SupprimePersonne("Erard");
     
    	cout<<endl;
     
     
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    personne.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    #ifndef PERSONNE_H
    #define PERSONNE_H
     
    #include <iostream>
    #include <string>
     
    using namespace std;
     
    class Personne{
    	private:
    		string Nom;
    		string Prenom;
    		int Age; 
    	public:
    		Personne();
    		void setNom(string LeNom);
    		void setPrenom(string LePrenom);
    		void setAge(int lage);
    		string getNom();
    		string getPrenom();
    		int getAge();	
    };
     
    class Collection{
    	private:
    		int NbPersonnes;
    		list <Personne> MaCollection;	
    	public:
    		Collection();
    		int getNbPersonnes();
    		void AjoutPersonne(Personne MaPersonne);
    		void NbPersonne();
    		void Parcourir();
    		void SupprimePersonne(string Nom);
    };
     
    /*-------------------------------
    /*		Methode de Personne
    /*------------------------------*/	
    Personne::Personne(){
    	Nom="";
    	Prenom="";
    	Age=0;
    }
     
    void Personne::setNom(string LeNom){
    	Nom=LeNom;
    	}
     
    void Personne::setPrenom(string LePrenom){
    	Prenom=LePrenom;
    	}
     
    void Personne::setAge(int lage){
    	Age=lage;
    	}
     
    string Personne::getNom(){return Nom;}
     
    string Personne::getPrenom(){return Prenom;}
     
    int Personne::getAge(){return Age;}
     
     
    /*-------------------------------
    /*		Methode de Collection
    /*------------------------------*/
    Collection::Collection(){
    	NbPersonnes=0;
    	}
    void Collection::NbPersonne(){
    	NbPersonnes++;
    	}
     
    int Collection::getNbPersonnes(){return NbPersonnes;}
     
    void Collection::AjoutPersonne(Personne MaPersonne){
    	MaCollection.push_back(MaPersonne);
    	}
     
    void Collection::Parcourir(){
    	for(list<Personne>::iterator parcours = MaCollection.begin(); parcours != MaCollection.end();parcours++)
    	{
    		cout<<"Nom: "<<parcours->getNom()<<endl;
    		cout<<"Prenom: "<<parcours->getPrenom()<<endl;
    		cout<<"Age: "<<parcours->getAge()<<endl<<endl;
    	}
    }
     
    void Collection::SupprimePersonne(string Nom){
    	for(list<Personne>::iterator parcours = MaCollection.begin(); parcours != MaCollection.end();parcours++)
    	{
    		if (Nom==parcours->getNom()){
    			cout<<"le supprime est:"<<endl;
    			cout<<"Nom: "<<parcours->getNom()<<endl;
    			cout<<"Prenom: "<<parcours->getPrenom()<<endl;
    			cout<<"Age: "<<parcours->getAge()<<endl<<endl;
    			delete parcours;
    		}
    	}
    	}
     
    #endif
    Ca ne compile plus, et il s'arrete sur le main sur :
    #include "Personne.h"

    Merci d'avance pour votre aide
    Mes créations de montages photos et vidéos sur mon blog:
    http://yanchasp.blogspot.com/

  2. #2
    Nouveau membre du Club Avatar de yanchasp
    Inscrit en
    Décembre 2005
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 66
    Points : 26
    Points
    26
    Par défaut
    Oups!!! j'ai oublié de dire.
    apparamenent ca vient de la le soucis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    void Collection::Parcourir(){
    	for(list<Personne>::iterator parcours = MaCollection.begin(); parcours != MaCollection.end();parcours++)
    	{
    		cout<<"Nom: "<<parcours->getNom()<<endl;
    		cout<<"Prenom: "<<parcours->getPrenom()<<endl;
    		cout<<"Age: "<<parcours->getAge()<<endl<<endl;
    	}
    }
     
    void Collection::SupprimePersonne(string Nom){
    	for(list<Personne>::iterator parcours = MaCollection.begin(); parcours != MaCollection.end();parcours++)
    	{
    		if (Nom==parcours->getNom()){
    			cout<<"le supprime est:"<<endl;
    			cout<<"Nom: "<<parcours->getNom()<<endl;
    			cout<<"Prenom: "<<parcours->getPrenom()<<endl;
    			cout<<"Age: "<<parcours->getAge()<<endl<<endl;
    			delete parcours;
    		}
    	}
    	}
    Faut il installer la librairie? ou autre, j'ai oublié
    Mes créations de montages photos et vidéos sur mon blog:
    http://yanchasp.blogspot.com/

  3. #3
    Nouveau membre du Club Avatar de yanchasp
    Inscrit en
    Décembre 2005
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 66
    Points : 26
    Points
    26
    Par défaut
    pour le include j'ai ca comme erreur ligne 5
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [...]\main.cpp In file included from main.cpp
    Mes créations de montages photos et vidéos sur mon blog:
    http://yanchasp.blogspot.com/

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Points : 256
    Points
    256
    Par défaut
    salut,
    moi je comprends pas trop le delete personne ?
    Si tu veux supprimer une personne de ta liste, c'est pas avec le delete. Voir dans la faq pour ça.
    De plus il n'y a aucun new nulle part ...

  5. #5
    Nouveau membre du Club Avatar de yanchasp
    Inscrit en
    Décembre 2005
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 66
    Points : 26
    Points
    26
    Par défaut
    ok pour le delete j'vais regarder dans la faq.

    mais rien avoir avec mon include qui marche pas par contre si je supprime les deux fonctions ca compile.
    Mes créations de montages photos et vidéos sur mon blog:
    http://yanchasp.blogspot.com/

  6. #6
    Nouveau membre du Club Avatar de yanchasp
    Inscrit en
    Décembre 2005
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 66
    Points : 26
    Points
    26
    Par défaut
    ha non en fait ca marche pas en enlevant les deux dernieres fonctions
    Mes créations de montages photos et vidéos sur mon blog:
    http://yanchasp.blogspot.com/

  7. #7
    Nouveau membre du Club Avatar de yanchasp
    Inscrit en
    Décembre 2005
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 66
    Points : 26
    Points
    26
    Par défaut
    bon a y est j'ai trouvé, par contre le delete déconne c'est sur, mais meme dans la faq je ne vois pas comment supprimer.
    J'ai essaye avec le remove mais marche pas.
    Mes créations de montages photos et vidéos sur mon blog:
    http://yanchasp.blogspot.com/

  8. #8
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaCollection.erase(parcours);
    ou bien Regarde la sur les itérateurs

  9. #9
    Membre habitué
    Avatar de superspag
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 153
    Points : 186
    Points
    186
    Par défaut
    Je suis d'accord avec Poukill, tu devrais tout simplement parcourir la faq sur les itérateur... Profites-en pour essayer de trouver où dans ton code il te manquerai un petit "const" ou un petit "&"
    Plus y'a d'Gruyère, plus y'a d'trous !
    Plus y'a d'trous, moins y'a d'Gruyère...
    Donc, Plus y'a d'Gruyère, moins y'a d'Gruyère !!!

  10. #10
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Ca ne compile plus, et il s'arrete sur le main sur :
    #include "Personne.h"
    Tu as dit plus haut que le fichier s'appelait personne.h, avec un p minuscule.
    Boost ftw

  11. #11
    Nouveau membre du Club Avatar de yanchasp
    Inscrit en
    Décembre 2005
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 66
    Points : 26
    Points
    26
    Par défaut
    Salut pour le problème d'itérateur j'ai trouvé.
    quand je le supprimai, je continuai la boucle..... voila pouquoi.

    voici comment je fais et ca marche nickel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void CollectionContactPro::SupprimeContact(string Nom){
        for(list<Pro>::iterator parcours = MesContactPro.begin(); parcours != MesContactPro.end();parcours++)
    	{
    		if (Nom==parcours->getNom()){
    			cout<<"Le supprime est : "<<parcours->getNom()<<" "<<parcours->getPrenom()<<endl<<endl;
    			// l'itérateur prend la valeur suivante (le renvoie du erase)
    			parcours=MesContactPro.erase(parcours);
    			//on enleve un contact dans le nombre
    			NbContact--;
            }
     
       }   
     
    }
    J'ai modifié également une grosse partie de mon code
    Mes créations de montages photos et vidéos sur mon blog:
    http://yanchasp.blogspot.com/

  12. #12
    Nouveau membre du Club Avatar de yanchasp
    Inscrit en
    Décembre 2005
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 66
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par loufoque
    Tu as dit plus haut que le fichier s'appelait personne.h, avec un p minuscule.
    Non c'est bien P, j'ai mal ecrit sur le fofo.
    Mes créations de montages photos et vidéos sur mon blog:
    http://yanchasp.blogspot.com/

Discussions similaires

  1. Réponses: 16
    Dernier message: 24/10/2008, 17h32
  2. Problème avec les listes
    Par aliassaf dans le forum Général Python
    Réponses: 3
    Dernier message: 10/07/2006, 17h57
  3. Problème avec des listes et des variables
    Par Knuckles dans le forum Général Python
    Réponses: 3
    Dernier message: 09/05/2006, 18h24
  4. Petit problèmes avec display list et transformations
    Par Baptiste Wicht dans le forum OpenGL
    Réponses: 5
    Dernier message: 10/02/2006, 17h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo