IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

fichier binaire SVP aidez moi.


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut 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 : 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&)

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Tu dois surcharger les opérateurs << et >> pour la classe CDataSatellite avec QDataStream.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    pouvez-vous m eclaircir un peu plus comment le faire SVP.
    Merci pour votre reponse.

Discussions similaires

  1. svp aidez moi :FreeImagePlus
    Par dev0077 dans le forum Bibliothèques
    Réponses: 0
    Dernier message: 20/09/2007, 03h21
  2. SVP aidez moi à résoudre ce prob de Filtrage
    Par kiops dans le forum Bases de données
    Réponses: 8
    Dernier message: 14/05/2007, 00h58
  3. SDL : SVP aidez moi !!!
    Par adidmamah dans le forum OpenGL
    Réponses: 5
    Dernier message: 11/06/2004, 08h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo