bonjour a vous tous,
en fait, je suis debutante en C++ , j aurai besoin de votre aide SVP. il est deja 5h de matin chez moi. j ai essaye toutes les combinaisons possibles et mon enregistrement ne marche toujours pas. je veux enregistrer une classe planete dans un fichier binaire.
la classe planete est definit comme suit :
la classe CDataPlanete contient une liste d une autre classe CDataSatellite donnee comme suit:
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 #ifndef CDATAPLANETE_H #define CDATAPLANETE_H #include "CDataSatellite.h" #include <QString> #include <QVector> #include <QList> struct CDataPlanete { QString nomPlanete; double taillePlanete; double distancePlanete; int anneePlanete; bool rotationPlanete; double inclinaisonPlanete; double orbitePlanete; QString texturePlanete; bool presenceSatellites; bool AnimationActive; int nombreSatellites; QList<CDataSatellite> vecteurSatellites; int pourcentageMinTailleSatellites; int pourcentageMaxTailleSatellites; int pourcentageMinDistanceSatellites; int pourcentageMaxDistanceSatellites; int pourcentageMinAnneeSatellites; int pourcentageMaxAnneeSatellites; int pourcentageMinOrbiteSatellites; int pourcentageMaxOrbiteSatellites; QString textureSatellites; QString textureAnneau; int pourcentageRayonAnneau; int pourcentageLargeurAnneau; int vitesse; int taux; bool presenceanimer; bool presencenoms; bool presenceaxes; bool presenceorbites; bool presenceplanetecourante; bool presencepositionnercamera; bool presenceAnneau; };
et voila mon code ou est ce que j ai des probles pour enregistrer ma CDataPlanete dans le fichier binaire:
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 #ifndef CDATASATELLITE_H #define CDATASATELLITE_H #include <QString> class CDataSatellite { public: double tailleSatellite; double distanceSatellite; int anneeSatellite; bool rotationSatellite; double inclinaisonSatellite; double orbiteSatellite; // }; #endif
et voila le code .cpp
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 #ifndef CMODEL_H #define CMODEL_H #include "CObservable.h" #include "CDataPlanete.h" #include "CDataSoleil.h" #include "CDataSysteme.h" #include "CDataSatellite.h" #include <QList> #define FILENAME "sauvegarde.sys" class CModel : public CObservable { public: CModel(); ~CModel(); void AjouterPlanete(CDataPlanete&); void SupprimerPlanete(); bool GetDataPlanete(CDataPlanete&,int); int GetNbPlanetes(); int GetIndexCourant(); void SetIndexCourant(int); private: CDataSoleil soleil; CDataSysteme systeme; QList<CDataPlanete> liste_planetes; int indexCourant; };
et voici l erreur que j ai obtenue :
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121 #include "CModel.h" #include <QFile> //Pour enregistrer dans une fichier (texte ou binaire) #include <QDataStream> //Pour enregistrer dans un fichier binaire spécialement #include <QList> #include <iostream> #include "CDataPlanete.h" using namespace std; CModel::CModel() { indexCourant = -1; //////////////////Recuperation du fichier: QFile monFichier(FILENAME); monFichier.open(QIODevice::ReadOnly);//en binaire par défaut QDataStream input(&monFichier); CDataSoleil soleil_tmp; CDataPlanete planete_tmp; CDataSatellite vecteurSatellites; //CDataSatellite satellite_tmp; input >>soleil_tmp.tailleSoleil >>soleil_tmp.luminositeSoleil >>soleil_tmp.textureSoleil >>soleil_tmp.VitessePlanete; //>>vitesse; soleil = soleil_tmp; while (!input.atEnd()) { input >>planete_tmp.nomPlanete >>planete_tmp.taillePlanete >>planete_tmp.distancePlanete >>planete_tmp.anneePlanete >>planete_tmp.rotationPlanete >>planete_tmp.inclinaisonPlanete >>planete_tmp.orbitePlanete >>planete_tmp.texturePlanete //Satellites... >>planete_tmp.presenceSatellites >>planete_tmp.nombreSatellites >>planete_tmp.presenceAnneau >>planete_tmp.pourcentageMinTailleSatellites >>planete_tmp.pourcentageMaxTailleSatellites >>planete_tmp.pourcentageMinDistanceSatellites >>planete_tmp.pourcentageMaxDistanceSatellites >>planete_tmp.pourcentageMinAnneeSatellites >>planete_tmp.pourcentageMaxAnneeSatellites >>planete_tmp.pourcentageMinOrbiteSatellites >>planete_tmp.pourcentageMaxOrbiteSatellites >>planete_tmp.textureSatellites >>planete_tmp.textureAnneau >>planete_tmp.pourcentageRayonAnneau >>planete_tmp.pourcentageLargeurAnneau >>planete_tmp.vecteurSatellites; for(int j=0;j<planete_tmp.nombreSatellites;j++) { CDataSatellite listSat; input <<planete_tmp.vecteurSatellites.at(j).tailleSatellite <<planete_tmp.vecteurSatellites.at(j).distanceSatellite <<planete_tmp.vecteurSatellites.at(j).anneeSatellite <<planete_tmp.vecteurSatellites.at(j).rotationSatellite <<planete_tmp.vecteurSatellites.at(j).inclinaisonSatellite <<planete_tmp.vecteurSatellites.at(j).orbiteSatellite; planete_tmp.vecteurSatellites.push_back(listSat); } liste_planetes.append(planete_tmp); } monFichier.close(); ///////////////////////////////////////////// if (liste_planetes.size() > 0) indexCourant = 0; } CModel::~CModel() { //////////////////Sauvegarde du fichier: QFile monFichier(FILENAME); monFichier.open(QIODevice::WriteOnly);//en binaire par défaut QDataStream output(&monFichier); output <<soleil.tailleSoleil <<soleil.VitessePlanete <<soleil.luminositeSoleil <<soleil.textureSoleil; for (int i = 0;i < liste_planetes.size(); ++i) { output <<liste_planetes.at(i).nomPlanete <<liste_planetes.at(i).taillePlanete <<liste_planetes.at(i).distancePlanete <<liste_planetes.at(i).anneePlanete <<liste_planetes.at(i).rotationPlanete <<liste_planetes.at(i).inclinaisonPlanete <<liste_planetes.at(i).orbitePlanete <<liste_planetes.at(i).texturePlanete //Satellites... <<liste_planetes.at(i).presenceSatellites <<liste_planetes.at(i).nombreSatellites <<liste_planetes.at(i).presenceAnneau <<liste_planetes.at(i).pourcentageMinTailleSatellites <<liste_planetes.at(i).pourcentageMaxTailleSatellites <<liste_planetes.at(i).pourcentageMinDistanceSatellites <<liste_planetes.at(i).pourcentageMaxDistanceSatellites <<liste_planetes.at(i).pourcentageMinAnneeSatellites <<liste_planetes.at(i).pourcentageMaxAnneeSatellites <<liste_planetes.at(i).pourcentageMinOrbiteSatellites <<liste_planetes.at(i).pourcentageMaxOrbiteSatellites <<liste_planetes.at(i).textureSatellites <<liste_planetes.at(i).textureAnneau <<liste_planetes.at(i).pourcentageRayonAnneau <<liste_planetes.at(i).pourcentageLargeurAnneau; //<<liste_planetes.at(i).vitesse; for(int j=0;j<liste_planetes.at(i).nombreSatellites;j++) { output <<liste_planetes.at(i).vecteurSatellites[j].tailleSatellite <<liste_planetes.at(i).vecteurSatellites[j].distanceSatellite <<liste_planetes.at(i).vecteurSatellites[j].anneeSatellite <<liste_planetes.at(i).vecteurSatellites[j].rotationSatellite <<liste_planetes.at(i).vecteurSatellites[j].inclinaisonSatellite <<liste_planetes.at(i).vecteurSatellites[j].orbiteSatellite; } } monFichier.close();
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 C:\Qt\4.3.4\src\corelib\io\qdatastream.h In function `QDataStream& operator>>(QDataStream&, QList<T>&) [with T = CDataSatellite]': 52 C:\Documents and Settings\user\Bureau\Pro\CModel.cpp instantiated from here 236 C:\Qt\4.3.4\src\corelib\io\qdatastream.h no match for 'operator>>' in 's >> t' note C:\Qt\4.3.4\src\corelib\io\qdatastream.h:129 candidates are: QDataStream& QDataStream::operator>>(qint8&) note C:\Qt\4.3.4\src\corelib\io\qdatastream.h:129 QDataStream& QDataStream::operator>>(quint8&)
Partager