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++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    12
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 12
    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", "[email protected]", "programmeur Java");	
    	Employe *emp2 = new Employe(2,"Melotte", "Amandine", "rue Franck 33, 4623 Magn�e", "0498712343", "[email protected]", "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
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    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
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    12
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 12
    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
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    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
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    12
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 12
    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
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    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.

+ 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