Bonsoir,

Nous utilisons un programme ayant recours à une multimap utilisant:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
multimap<string, class Client> m;
en clé: le champ nom d'une classe Client, et en objet: Client.

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 Client
{
 private:
         int m_id;
         string m_nom;
         string m_prenom;
         Adresse *m_adress;
 
 public:
         void afficher(std::ostream &out);      
         Client();
         ~Client();
         string getnom();
         string getprenom();
         Adresse* getadress();
         void setnom(string);
         void setprenom(string);
         void setadress(Adresse*);
         Client nouveauclient();
         Client &operator=(const Client &);
         //acheter();
         //avis();       
};
Nous avons crée une fonction devant permettre la création d'un nouveau client via la saisie de l'utilisateur.

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
 Client Client :: nouveauclient()
{               
      Client nouveau;
      int num,cp;
      char nom2[200],prenom2[200],rue2[400],ville2[200];          
      string rue,ville;              
 
 
 
 
                cout << "veuillez saisir votre nom : " <<endl;
                fflush(stdin);
                gets(nom2);
 
 
                cout << "veuillez saisir votre prenom : " <<endl;
                fflush(stdin);
                gets(prenom2);
 
                cout << "veuillez saisir votre numero d'adresse : " <<endl;
                cin>>num;
 
                cout<< "Veuillez saisir votre rue : "<<endl;
                fflush(stdin);
                gets(rue2);
 
                cout << "Veuillez saisir votre ville : "<<endl;
                fflush(stdin);
                gets(ville2);
 
                cout << "veuillez saisir votre code postal : " <<endl;
                cin>>cp;
 
                nouveau.setnom(nom2);
                nouveau.setprenom(prenom2);
                rue=rue2;
                ville=ville2;
 
 
                nouveau.getadress()->setnum(num);
                nouveau.getadress()->setville(ville);
                nouveau.getadress()->setrue(rue);
                nouveau.getadress()->setcp(cp);
 
 
     return nouveau;
}
Le retour de cette fonction est affecté dans le main à une variable de type Client:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
 clien=clien.nouveauclient();
Ce nouveau client nous essayons de l'insérer dans la multimap de la manière suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
m.insert(make_pair(clien.getnom(),clien));
Mais une fois cette insertion effectué, l'affichage du contenu de la multimap fais planter le programme.

Le seul moyen de réussir à afficher le contenu de la multimap est de changer l'objet en l'établissant comme pointeur :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
multimap<string, class Client*> m;
Ainsi que l'insertion :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
m.insert(make_pair(clien.getnom(),&clien));
Et l'affichage :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 for ( it=m.begin() ; it != m.end(); it++ )
cout << "Clef : " << (*it).first << endl << "Client :" << *(*it).second << endl;
Mais le problème devient que le contenu de la multimap ne change pas pour ce qui est de la donnée, la clé change mais l'objet affiché correspond au dernier client saisi.

Merci d'avance pour votre aide, qui nous serait très précieuse!!