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
et dans un autre fichier j'utilise ma variable en y ajoutant des objets de type bateau
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
Menu.cpp
et enfin dans mon fichier qui contient le main, je fais ceci:
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; }
main.cpp
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
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(); } }
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.
Partager