C++ probleme de passage de variable

boubacar_de_monaco

Membre confirmé
1 Novembre 2005
52
0
Bonjour à tous,

J'ai un assez gros problème en developpement et si quelqu'un pouvait m'aider je serai très content.
C'est un code de location de voiture;

J'ai une classe Emprunteur qui contient un container list de devis. Or quand je rajoute des éléments dans cette liste avec une fonction membre public de Emprunteur, les modifications que j'arrive à voir dans la fonction disparaisse aussitôt à l'extérieur?
C'est un problème de déclaration?

Cordialement

Voici des bout de mon code:

Bloc de code:
class Emprunteur
{
	
	public:
	
	Emprunteur();
	~Emprunteur();
	{...}

	void ajout_devis(std::list<standard> ma_liste_std,std::list<luxe> ma_liste_luxe,std::list<Moto> ma_liste_moto, std::string marque_, std::string modele_, int vehicule);
	
	private:
	
	std::string nom;
	std::string prenom;
	std::string id;
	
	Adresse *mon_Adresse;

// Ici le conteneur qui me pose probleme!!!!!!!!!!!!!!
	std::list<devis> mes_devis;
	
};


void Emprunteur::louer(std::list<standard> ma_liste_std,std::list<luxe> ma_liste_luxe,std::list<Moto> ma_liste_moto)
{
	string marque_; string modele_;// std::list<devis> &mes_devis_ref=mes_devis;
	char decision='z'; int vehicule=0;
	
	{...}
	
	cout << "Informations concernant la location \n\n";
	cout << "Veuillez saisir la marque du Vehicule: ";
	cin >> marque_;
	cout << "Veuillez saisir le modele du Vehicule: ";
	cin >> modele_;
	
	ajout_devis(ma_liste_std, ma_liste_luxe, ma_liste_moto, marque_, modele_, vehicule); // cette fonction sera utile lors de l'enregistrement des locations
	display_devis();
	// en sortant de cette fonction il semble que ma liste de devis est de nouveau vide!!!!
};



void Emprunteur::ajout_devis(std::list<standard> ma_liste_std,std::list<luxe> ma_liste_luxe,std::list<Moto> ma_liste_moto, std::string marque_, std::string modele_, int vehicule)
{
	devis dev_; devis &dev_ref=dev_;
	
	standard s; standard &s_ref=s;
	luxe x; luxe &x_ref=x;
	Moto m; Moto &m_ref=m;
	bool existence=false;
	
	if (vehicule == 1)
	{
		s_ref=trouver_standard(ma_liste_std,marque_, modele_, existence);
		if (existence)
		{
			
			dev_ref.initialise(marque_, modele_, s_ref);
			s_ref.louee(); // on touche au vehicule;
			if (mes_devis.empty()) 
			{
				cout << "mes devis est vide\n";
				
			};
			mes_devis.push_back(dev_ref);
			// a ce stade, il effectue bien le push_back et ajoute le nouveau devis dans ma liste.			
			
		};
	{...}

};

Merci Beaucoup.
 
1/ Quand tu passes des éléments à une fonction et que ceux-ci n'ont pas être modifiés, il faut les passer en const <type>& (référence constante), ça évite des recopies inutiles lors de la création de variables locales sur la pile.
2/ C'est quoi ses déclarations au début de ta fonction ajout_devis ? Pourquoi une variable et une référence sur cette variable ? Tu travailles avec une référence sur une variable locale, qui est donc détruite lorsque tu sors de la fonction (et sa référence avec). Travaille donc directement avec ta variable dev_.