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

MFC Discussion :

Problème avec la serialization des CArray


Sujet :

MFC

  1. #1
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2005
    Messages : 26
    Points : 10
    Points
    10
    Par défaut Problème avec la serialization des CArray
    Bonjour tout le monde,
    Comme le titre l'indique, j'ai du mal à sérializer mes objets.
    Je suis sous Visual C++ v6.

    La structure de l'objet à sauvegarder est un peu particulière.

    J'ai un Objet liste_armee contenant un CArray <Unite,Unite&> (Unite étant un objet egalement)
    L'objet Unite quand à lui possède un autre CArray <Figurine,Figurine&> (Unite étant un objet egalement)
    ainsi de suite pour donner la structure suivante :

    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
     
    class liste_armee :
     
          CArray <Unite,Unite&> 
     
    class Unite :
     
          CArray <Figurine,Figurine&> 
          CArray <Equipement,Equipement&>
     
    class Figurine :
     
          CArray  <Equipement,Equipement&>
     
    class Equipement:
     
    (je sais c'est super long)
     
    La sérialization se passe très bien pour l'objet liste_armee et son tableau CArray. 
    Le soucis est que le CArray Figurine et Equipement n'arrivent pas à se sérializer correctement.
     
    Afin de serializer la class Unite j'ai dû utiliser ce code
     
    template <> void AFXAPI SerializeElements <Unite> ( CArchive& ar, Unite* unite, int nCount )
    {
        for ( int i = 0; i < nCount; i++, unite++ )
        {
            // Serialize each Unite object
            unite->Serialize( ar );
        }
    }
    Le hic c'est que je n'arrive pas reproduire ce même code pour mes classes Figurine et Equipement.
    Petite precision le programme compile (ce sont les pires bugs !!!).

    Donc si quelqu'un peu m'aider à trouver une solution ça serait sympa !
    Si vous voulez plus de precisions, demandez-moi !
    (mais je veux juste sauvegarder des CArray)

    Merci !!!
    [a l'avenir pense a mettre la balise de code ,Merci Farscape]

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323

  3. #3
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2005
    Messages : 26
    Points : 10
    Points
    10
    Par défaut
    J'ai déjà visualiser la FAQ mais elle ne me premet pas d'avancer.

    Dans l'example de la FAQ, il n'y a qu'une seule classe sérializée et aucune classe imbriquée dans l'objet CItem.

    Comme je le disais j'arrive à sérializer mon Objet Liste_armee et le CArray d'Unite, mais je n'arrive pas à serializer les autres CArray (donc figurine et equipement).

    De plus, j'ai déjà essayé de copier le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    template <>  void AFXAPI SerializeElements <CItem> ( CArchive& ar, 
        CItem* pItem, int nCount )
    {
        for ( int i = 0; i < nCount; i++, pItem++ )            
            pItem->Serialize( ar );    
    }
    en remplaçant CItem par les objets Unite, Equipement et Figurine. Le soucis est qu'il n'en veux qu'un et un seul.

    Petite precision : tous les objets soit Liste_arme, Unite, Figurine et Equipement sont dérivés de CObject et donc possède toutes les fonctions pour la serialization.

    Voilà donc si quelqu'un peux m'aider à trouver une solution ça serait sympa !

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    Dans l'example de la FAQ, il n'y a qu'une seule classe sérializée et aucune classe imbriquée dans l'objet CItem.
    et alors ? le principe est le même chaque tableau doit savoir se serializer.
    en remplaçant CItem par les objets Unite, Equipement et Figurine. Le soucis est qu'il n'en veux qu'un et un seul.
    tu dois te tromper de syntaxe ,ce principe en C++ se nomme la spécialisation d'une fonction template.
    donc l'utilisateur redéfinit la fonction template pour chaque type dont il à besoin .
    attention de bien noter la pre declaration du template dans le .h sinon ça ne compile pas.
    A mettre dans le .h de la classe et pour chaque type: exemple faq:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // dans le .h 
    template<> void AFXAPI SerializeElements<CItem> (CArchive& ar, CItem* pElements, int nCount);

  5. #5
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2005
    Messages : 26
    Points : 10
    Points
    10
    Par défaut [Résolu] Problème de sérialization des CArray
    Ben c'était bien ça.
    Il faut bien rajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    template<> void AFXAPI SerializeElements<CItem> (CArchive& ar, CItem* pElements, int nCount);
    dans chaque point h (dans mon cas Unite, Figurine, Equipement).

    Merci beaucoup pour ton soutien!

  6. #6
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    si c'est ok pense a cliquer sur le bouton

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec la gestion des événements
    Par CynO dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 17/10/2005, 10h07
  2. problème avec l'affichage des caractères spéciaux
    Par michelkey dans le forum Général Python
    Réponses: 4
    Dernier message: 19/08/2005, 08h09
  3. Réponses: 2
    Dernier message: 16/01/2005, 23h18
  4. [SWT] Problème avec la transparence des PNG
    Par sirjuh dans le forum SWT/JFace
    Réponses: 1
    Dernier message: 02/08/2004, 08h07
  5. Réponses: 11
    Dernier message: 16/12/2003, 19h58

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