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

Discussion :

Structure non reconnue pour la sérialisation

  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1
    Par défaut Structure non reconnue pour la sérialisation
    Bonjour et merci pour ce retour d'expérience toutefois je rencontre un problème à la compilation

    Dans mon fichier serveur.h en private j'ai ajouté ma structure et la surcharge des opérateurs comme suit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
       // Structure de fichier
        struct StructureFichier {
            quint16 typeDeMessage;
            int tailleDuFichier;
            QString signature_du_fichier;
            QString nom_du_fichier;
        };
     
        friend QDataStream& operator << (QDataStream&, const StructureFichier&);
        friend QDataStream& operator >> (QDataStream&, StructureFichier&);
    et dans serveur.ccp les deux fonctions
    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
    //*******************************************************************************************
    // Serialization de l'entete
    //*******************************************************************************************
     
    QDataStream &operator<<(QDataStream &streamOut, const StructureFichier &entete)
    {
        streamOut << (quint16)entete.typeDeMessage
                  << (int)entete.tailleDuFichier
                  << (QString)entete.signature_du_fichier
                  << (QString)entete.nom_du_fichier;
     
        return streamOut;
    }
     
    //*******************************************************************************************
    // Deserialization de l'entete
    //*******************************************************************************************
     
    QDataStream &operator>>(QDataStream &streamIn, StructureFichier &entete)
    {
     
        streamIn >> (quint16)entete.typeDeMessage
                 >> (int)entete.tailleDuFichier
                 >> (QString)entete.signature_du_fichier
                 >> (QString)entete.nom_du_fichier;
     
        return entete;
    }
    mais la compilation me renvoi systématiquement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    serveur.cpp:307: erreur : 'StructureFichier' does not name a type
    serveur.cpp:307: erreur : ISO C++ forbids declaration of 'entete' with no type [-fpermissive]
    serveur.cpp:-1: In function 'QDataStream& operator<<(QDataStream&, const int&)':

    si quelqu'un avait une petite idée
    merci d'avance

  2. #2
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2010
    Messages : 248
    Par défaut qRegisterMetaType
    Je pense qu'il manque l'enregistrement des types ainsi que des opérateurs de flux.

    MyClass.h
    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
    class MyClass{
    ...
    };
    inline QDataStream &operator<<(QDataStream &out, const MyClass &mc)
    {	
        //Ensure the version is the same between operator << and >>
        out.setVersion(QDataStream::Qt_4_8);
        ...
        return out;
    }
     
    inline QDataStream &operator>>(QDataStream &in, Device &d)
    {
        //Ensure the version is the same between operator << and >>
        in.setVersion(QDataStream::Qt_4_8);
        ...
        return in;
    }
    Main.cpp (ou dans un constructeur, moi je le met dans le constructeur de MainWindow). Ce qui est important c'est d'appeler ces fonctions avant d'utliser le type enregistré.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        qRegisterMetaType<MyClass>("MyClass");
        qRegisterMetaTypeStreamOperators<MyClass>("MyClass");
    Tout est expliqué ici : Qt Meta Type

Discussions similaires

  1. Structure non reconnue.
    Par PunkFloyd91 dans le forum C
    Réponses: 8
    Dernier message: 02/04/2012, 17h59
  2. makefile, règle de compilation non reconnue pour la cible principale
    Par davcha dans le forum Systèmes de compilation
    Réponses: 1
    Dernier message: 10/06/2011, 14h34
  3. Réponses: 3
    Dernier message: 11/05/2011, 19h49
  4. Périphérique USB non reconnu pour mes nouveaux matériels
    Par The Molo dans le forum Périphériques
    Réponses: 21
    Dernier message: 23/09/2009, 13h41
  5. Constantes et autre Structures non reconnue [API Windows]
    Par LeFoUvErT dans le forum Dev-C++
    Réponses: 3
    Dernier message: 15/09/2007, 11h48

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