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 :

probleme avec vector d'object


Sujet :

C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 12
    Points : 9
    Points
    9
    Par défaut probleme avec vector d'object
    Bonjour,

    voila je vous expose mon problème.

    J'ai une classe Personnel dont hérite Employe, une classe Session avec un vector<Personnel> pers et une classe Formation avec un vector<Session> sess.

    Dans ma fonction inscrireParticipant, je remplis le vector pers avec des objets Personnel.

    Le programme tourne, malheureusement, lorsque j'utilise cette fonction et que j'affiche une Formation, le vector pers de la Session est bien rempli mais pas celui de la Formation .

    Auriez-vous une idée? si du moins vous avez compris mon probleme. Merci à vous.


    - Formation.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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    #include <iostream>
    using namespace std;
     
    #include "Formation.h"
     
    Formation::Formation(int num, char name[], int jours, char tel[])
    {
    	numero = num;
    	strcpy(nom,name);
    	nb_jours = jours;
    	strcpy(telephone,tel);
    }
     
    Formation Formation::operator =(const Formation &obj)
    {
    	numero = obj.numero;
    	strcpy(nom,obj.nom);
    	nb_jours = obj.nb_jours;
    	strcpy(telephone,obj.telephone);
     
    	return *this;
    }
     
    void Formation::afficher()
    {
    	cout<<" "<<endl;
    	cout<<" Numero: "<<numero<<endl;
    	cout<<" Nom   : "<<nom<<endl;
    	cout<<" Jours : "<<nb_jours<<endl;
    	cout<<" Tel.  : "<<telephone<<endl;
    	cout<<" "<<endl;
    	cout<<" - liste des sessions -"<<endl;
    	cout<<"   ------------------"<<endl;
    	if (liste.empty())
    	{
    		cout<<" Il n'y a pas de session pour cette formation."<<endl;
    	}
    	else
    	{
    		for (int i=0; i<liste.size(); i++)
    		{
    			liste[i].afficher();
    		}
    	}
    	cout<<"   ------------------"<<endl;
    }
     
    void Formation::ajouterSession(const Session &sess)
    {
    	liste.push_back(sess);
    }
     
    void Formation::supprimerSession(int pos)
    {
    	liste.erase(liste.begin()+(pos-1));
    }
    - Session.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
     
     
    #ifndef H_SESSIONS
    #define H_SESSIONS
     
    #include "Employe.h"
    #include <vector>
    #include <iostream>
    using namespace std;
     
    class Session
    {
    	private: 
    				char date[9];
    				char lieu[20];
    				float prix;
    				vector<Personnel> liste;
     
    	public:
    				Session::Session(char dat[], char place[], float tarif)
    				{
    					strcpy(date, dat);
    					strcpy(lieu,place);
    					prix = tarif;
    				};
    				~Session(){};
    				void afficher();
    				Session operator=(const Session &obj);
    				void inscrireParticipant(const Personnel& pers);
    };
     
    #endif
    - Session.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
    44
    45
     
    #include <iostream>
    using namespace std;
     
     
    #include "Session.h"
     
     
    void Session::afficher()
    {
    	cout<<"   Date   : "<<date<<endl;
    	cout<<"   Lieu   : "<<lieu<<endl;
    	cout<<"   Tarif  : "<<prix<<endl;
    	cout<<""<<endl;
    	cout<<"   - participants -"<<endl;
    	cout<<"     ------------"<<endl;
    	if(liste.empty())
    	{
    		cout<<"     Il n'y a pas de participant inscrit a cette session."<<endl;
    	}
    	else
    	{
    		for (int i=0; i<liste.size(); i++)
    		{
    			liste[i].afficher();
    		}
    	}
    	cout<<"     ------------"<<endl;
    }
     
    Session Session::operator =(const Session &obj)
    {
    	strcpy(date, obj.date);
    	strcpy(lieu,obj.lieu);
    	prix = obj.prix;
     
    	return *this;
    }
     
     
    void Session::inscrireParticipant(const Personnel& pers)
    {
    	cout<<"---- INSCRIPTION PARTICIPANT PAR REFERENCE -----"<<endl;
    	liste.push_back(pers);
    }

    -main- --> je vous montre ou ca foire ici.

    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
    void main()
    {
    	Responsable_formation resp(3,"bill","boll", "rue Sare 12, 4000 Liege");
    	Employe emp1(1,"Crommen", "Jonathan", "rue Sauny 13, 4624 Romsee", "0498733855", "irilox@hotmail.com", "programmeur Java");	
    	Employe *emp2 = new Employe(2,"Melotte", "Amandine", "rue Franck 33, 4623 Magnée", "0498712343", "mandine@hotmail.com", "analyste");	
    	
    	Formation form1(1, "SQL SERVER 2008", 4, "043551212");
    	Formation form2(3, "COBOL", 2);
    
    	Session sess1("23/06/09", "Forem Liege", 1240);
    	Session sess2("10/09/09", "Bruxelles expo", 4240);
    	Session sess3("02/02/10", "Forem Namur", 2340);
    
    
    	form1.ajouterSession(sess1);  ---> marche sans probleme
    	form1.ajouterSession(sess2);
    
    	
    	sess1.inscrireParticipant(emp1); ---> le probleme est ici
    	form1.afficher();   --> si j'affiche ceci, il n'y a pas de participant dans la session de la formation
    
                 par contre si je refais un form1.ajouterSession, ca marche, y aurait-il un probleme de reference??
    	
    
    	getchar();
    }

    Merci pour votre lecture!

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Il manque Formation.h...

    PS: const, const, const! On ne le dira jamais assez!
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    voila le formation.h, tu as une piste?


    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
     
     
    class Formation
    {
    	protected: 
    				int numero;
    				char nom[20];
    				int nb_jours;
    				char telephone[11];
    				vector<Session> liste;
     
    	public:
    				// CONSTRUCTEUR AVEC PARAMETRE (telephone pas obligatoire)
    				Formation(int num, char name[], int jours, char tel[]="");
    				// DESTRUCTEUR
    				~Formation(){};
    				// SURCHARGE DE L'OPERATEUR D'AFFECTATION (pour pouvoir affecter un objet à un autre)
    				Formation operator=(const Formation &obj);
    				void afficher();
    				void ajouterSession(const Session& sess);
    				void supprimerSession(int pos);
    };
     
    #endif

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Le problème, c'est que tu ajoutes à ta formation une copie de la session, pas la session elle-même.
    Résultat, quand tu ajoutes un participant à la session, bien...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Le problème, c'est que tu ajoutes à ta formation une copie de la session, pas la session elle-même.
    Résultat, quand tu ajoutes un participant à la session, bien...

    Ah ok, je me preoccupais tellement des participants à la session que je n'ai meme pas pensé revoir plus haut dans mon code.

    Que me conseillerais-tu, de trvailler avec des pointeurs??

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Soit travailler avec des pointeurs (intelligents si possible, genre les shared_ptr<> de la bibliothèque Boost), soit utiliser des références vers les éléments du vecteur:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	Session & getSession(int pos);
    	Session const & getSession(int pos) const;
    };
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Session & Formation::getSession(int pos)
    {
    	return liste.at(pos);
    }
    Session const & Formation::getSession(int pos) const
    {
    	return liste.at(pos);
    }
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	form1.ajouterSession(sess1);
    	form1.ajouterSession(sess2);
     
    	form1.getSession(0).inscrireParticipant(emp1);
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Soit travailler avec des pointeurs (intelligents si possible, genre les shared_ptr<> de la bibliothèque Boost), soit utiliser des références vers les éléments du vecteur:

    Impecc, ca marche! Je te remercie pour les réponses rapides... longue vie à toi sur developpez.net

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. petit probleme avec Vector
    Par Msakeni dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 11/12/2008, 19h28
  2. probleme avec vector.assign
    Par jahmanzaar dans le forum Débuter
    Réponses: 1
    Dernier message: 29/10/2008, 22h45
  3. Pb avec vector<? extends Object>
    Par beuhnoix dans le forum Langage
    Réponses: 9
    Dernier message: 29/01/2008, 14h54
  4. probleme avec vector
    Par guitariste dans le forum C++
    Réponses: 2
    Dernier message: 26/12/2007, 16h23
  5. probleme avec vector
    Par venomelektro dans le forum SL & STL
    Réponses: 16
    Dernier message: 16/08/2004, 23h39

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