Bonsoir à tous.
Voilà, je vous écrit ce petit post car je rencontre un problème lorsque je souhaite utiliser l'operator ">>" afin d'aller relire des données dans un fichier.
Donc, pour ce faire, je passe par une méthode que j'appel load. Je la définit comme suit:
Cette méthode ce situe dans une classe "Navire". Et dans le corps de la méthodes, voilà ce que je fais:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 void load(char* n, char* p);
La variable _flag est un integer qui me permet de dire si je me trouve dans la partie de code de la surcharge qui me permettra de relire dans le fichier, ou alors si c'est dans la partie ou je saisis les valeurs de mon 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 void Navire::load(char* n, char* p) { cout<<"Chargement du navire"<<endl; (*this)._flag = 1; char *tempo = new char[strlen(n) + strlen(p) + 4]; strcpy(tempo, n); strcpy(&tempo[strlen(n)], p); strcpy(&tempo[strlen(n)+ strlen(p)], ".ser"); cout<<"Nom du fichier: "<<tempo<<endl; fstream foc(tempo, ios::in); cout<<"foc cree"<<endl; foc>>(*this); cout<<"foc lu..."<<endl; foc.close(); cout<<"foc close"<<endl; (*this)._flag = 0; }
Et voici pour finir, la surcharge de l'operator>>:
Et en fait, lorsque je lance mon applic, je demande de recharger les fichiers que j'ai saisi précédemment, et alors il me fait la chose suivante:
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59 istream &operator>>(istream &s, Navire& B) { cout<<"surcharge de cin dans Navire"<<B._flag<<endl; if(B._flag == 1) { cout<<"relecture dans le fichier"; s>>B._Nom; s>>B._PortAttache; s>>B._Numero; s>>B._NombreEquipage; s>>B._IdAssurance; s>>B._NomCapitaine; s>>B._Tonnage; s>>B._Longueur; s>>B._Tirant; return s; } else { char CR; char N[20]; cout<<"\tVeuillez saisir les valeurs suivantes:"<<endl; cout<<"- nom: "; s>>N; B.setNom(N); cout<<"- port d'attache: "; s>>N; B.setPort(N); cout<<"- le numero du bateau: "; s>>N; B.setID(N); cout<<"- le nombre de membre d'equipage: "; s>>B._NombreEquipage; cout<<"- l'id de l'assurance: "; s>>N; B.setAssurance(N); cout<<"- le nom du capataine: "; s>>N; B.setCapitaine(N); do{ try{ cout<<"- tonnage: "; s>>B._Tonnage; if( B._Tonnage<= 0) { InvalidMeasureException IME("Valeur ne peut etre negative ou nulle"); throw (IME); } cout<<"- longueur du vaisseau: "; s>>B._Longueur; if( B._Longueur<= 0) { InvalidMeasureException IME("Valeur ne peut etre negative ou nulle"); throw (IME); } cout<<"- tirant d'eau du vaisseau: "; s>>B._Tirant; if( B._Tirant<= 0) { InvalidMeasureException IME("Valeur ne peut etre negative ou nulle"); throw (IME); } } catch(InvalidMeasureException& e) { cout<<e.what(); } }while(B._Tonnage<= 0 || B._Longueur<= 0 || B._Tirant<= 0); return s; } }
Alors que mon fichier lulupopol.ser existe bien. Apparement il butte sur le fait que je fasse un if dans la surcharge ou autre problème du genre, car j'affiche bien la valeur de _flag, et elle vaut 1 (juste après surcharge de cin dans Navire).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Veuillez saisir le nom du bateau: lulu veuillez saisir le port d'attache: popol Chargement du navire Nom du fichier: lulupopol.ser foc cree surcharge de cin dans Navire1 Segmentation Fault (core dumped)
Voilà, je pense avoir tout dit, comme toujours, j'en fait surement trop, mais au moins comme ça, je suis sûr que vous pourrez m'aider.
Merci d'avance pour l'aider que vous pourrez m'apporter, et dans l'attente de réponses, je vous souhaite une bonne fin de soirée, de week-end, ...
p.s.: je compile sur une machine virtuelle de SUN Solaris
Partager