fichier binaire SVP aidez moi.
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:
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:
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:
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:
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:
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&) |