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.