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 :

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;
 };
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
 
#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 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
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 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
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();
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
 
 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&)