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:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
void load(char* n, char* p);
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
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;
}
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.

Et voici pour finir, la surcharge de l'operator>>:

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;
	}
}
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
 
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)
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).

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