Bonsoir,
Nous utilisons un programme ayant recours à une multimap utilisant:
multimap<string, class Client> m;
en clé: le champ nom d'une classe Client, et en objet: Client.
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.
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:
clien=clien.nouveauclient();
Ce nouveau client nous essayons de l'insérer dans la multimap de la manière suivante :
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 :
multimap<string, class Client*> m;
Ainsi que l'insertion :
m.insert(make_pair(clien.getnom(),&clien));
Et l'affichage :
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!!
Partager