Bonsoir à tous;

J'ai un souci avec une portion de mon code c++, peut être que ça parait facile mais pour moi non à l'heure qu'il est car j'ai passé toute ma journée sans le réussir.

Mon problème est que j'ai déclaré une variable comme static dans une classe(classe bateau) comme vous indique le code ci-dessous:

bateau.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
class bateau{
 
	private: 
		string nomb;
		float longb;
		float largb;
		string annee;
		Categorie categorie; // qui est soit MONOCOQUES ou MULTICOQUES
		float tpsTraverse;
		set<sponsors*> listeSponsor;
		skipper * chefDeBord;//le chef de bord(skipper)
		routeur * routeurs;//  (le routeur)
 
	public: 
 
		static list<bateau*> listeBateau; // il s'agit de cette variable
 
		enum Categorie{MONOCOQUES,MULTICOQUES}; //les bateaux dans notre cas sont de ces deux type
		typedef enum Categorie Categorie;
		//constructeur
		bateau( string nomb, float longb, float largb, string annee, Categorie cat);
 
};
#endif
et dans un autre fichier j'utilise ma variable en y ajoutant des objets de type bateau

Menu.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
void Menu::creationBateaux(string fileName){
 	ifstream fichier(fileName.c_str(),ios::in);
    if(fichier)
	{       
		string ligne;
		string element;
		string tabBateau[5]; //tableau qui contiendra les caracteristique du futur bateau
		int index,catBat;float longb,largb;
		while(getline(fichier,ligne)){
			index=0;
			 stringstream lig(ligne);
    		 while (std::getline(lig, element, ':')){//decouper chaque ligne en ses composants
    		 	tabBateau[index]=element; //on stocke chaque element dans une cellule du tableau
             	index++;					//
    		}
    		//on cree ici le bateau dont les caracteristiques sont dans le tableau
    		longb=stof(tabBateau[1]);//convertir en float la long du bateau
    		largb=stof(tabBateau[2]);// convertir la larg du du bateau en float
    		catBat=stoi(tabBateau[4]);//categorie du bateau qui est un int, soit 0 soit 1
    		//cout<<tabBateau[0]<<" "<<tabBateau[1]<<" "<<tabBateau[2]<<" "<<tabBateau[3]<<" "<<tabBateau[4]<<endl;
    		if(catBat==1)//on construit un bateau de catégorie 2 (multicoque)
    		{
    			bateau b(tabBateau[0],longb,largb,tabBateau[3],bateau::MULTICOQUES);
    			//b.afficheBateau();
    			//this->listeBateau.push_back(&b);
    			bateau::listeBateau.push_back(&b);
    		}
    		else if(catBat==0) //on construit un bateau monocoque(cat 1)
    		{
    			bateau b(tabBateau[0],longb,largb,tabBateau[3],bateau::MONOCOQUES);
    			//b.afficheBateau();
    			bateau::listeBateau.push_back(&b);
    			//this->listeBateau.push_back(&b);
    			//(*(bateau::listeBateau.begin()))->afficheBateau();
    		}
		}
		fichier.close();
    }
    else
       cerr << "Impossible d'ouvrir le fichier !"<<endl;
   //return this->listeBateau;
   (*(bateau::listeBateau.begin()))->afficheBateau();
        // 0;
 }
et enfin dans mon fichier qui contient le main, je fais ceci:

main.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
extern list<bateau*>bateau::listeBateau; //definition de la liste d'instance bateau
int main(int argc, char const *argv[])
{
 
	Menu menu; list<bateau*> liste;
	//liste=menu.getListeBateau();
	//Course course("N° 1");
	menu.creationBateaux("bateau.txt");
	cout<<bateau::listeBateau.size()<<endl;
	list<bateau*>::iterator it =bateau::listeBateau.begin();
	while(it!=bateau::listeBateau.end()){
		(*it)->afficheBateau();
	}
}
le problème, quand j'affiche le contenu de ma variable static dans ma fonction void Menu::creationBateaux(string fileName) tout se passe bien il m'affiche bien les objets à l'intérieur
mais dans le main, il me donne ceci
�+��y""
G0�(!p�7 ;"
)!�7 �(!��7 e
@� �'!�7 ��"
�o b'!��7 ��
P���'!P�7 p��
�� J'!��7 ��
@�z'!@�7 �8l>�
��L�(! �7 �x
���_�"
0�Y�(!��7 (!��7 ��"
P"^CҶ"
et ce qui est paradoxale, la taille de ma liste( variable static) s’incrémente à chaque ajout.
Je précise que j'ai pas de problème d'inclusion en tout cas rien n'est signalé concernant.
Merci d'avance.