Problème avec variable globale C++
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:
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:
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:
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.