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 :

list d'objet dans une classe


Sujet :

C++

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 44
    Points : 13
    Points
    13
    Par défaut list d'objet dans une classe
    alors c'est assez dur à expliquer comme ça, donc je vais utiliser directement le cas sur lequel je suis !

    je recois un message XML dans un string qui a cette tête :
    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
     
    <Alien-RFID-Reader-Auto-Notification>
      <ReaderName>xxxr</ReaderName>
      <ReaderType>xxxx</ReaderType>
      <IPAddress>xxx.yyy.zzz.www</IPAddress>
      <CommandPort>ab</CommandPort>
      <MACAddress>xx:xx:xx:xx:xx:xx</MACAddress>
      <Time>...</Time>
      <Reason>...</Reason>
      <StartTriggerLines>..</StartTriggerLines>
      <StopTriggerLines>..</StopTriggerLines>
    <Alien-RFID-Tag-List>
    <Alien-RFID-Tag>
      <TagID>...........</TagID>
      <DiscoveryTime>......</DiscoveryTime>
      <LastSeenTime>.....</LastSeenTime>
      <Antenna>...</Antenna>
      <ReadCount>..</ReadCount>
      <Protocol>...</Protocol>
    </Alien-RFID-Tag>
    <Alien-RFID-Tag>
    ...
    </Alien-RFID-Tag>
    ...
    <Alien-RFID-Tag>
    ...
    </Alien-RFID-Tag>
    </Alien-RFID-Tag-List>
    </Alien-RFID-Reader-Auto-Notification>
    comme vous le constater, j'ai un gros ensemble (notification), qui un contient un autre (taglist) qui peut en contenir plusieurs (Tag).
    Le truc c'est que je cherche à parser ce xml (on m'a conseillé TinyXML pour ça) mais je voudrais récupérer les information dans un objet.

    la situation est maintenant posée. Passons au problème maintenant :
    Je cherche donc à créer une classe que le parseur me remplira.
    j'ai donc fait quelque chose de ce style :
    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
    class Notify
    {
        private:
     
        std::string readername;
        std::string readertype;
        std::string ipaddress;
        int commandport;
        std::string macaddress;
        std::string time;
        std::string reason;
        std::string starttriggerlines;
        std::string stopttriggerlines;
     
     
    };
     
    class Tag
    {
        private:
     
        std::string tagid;
        std::string discoverytime;
        std::string lastseentime;
        int antenna;
        int readcount;
        int protocol;
     
     
    };
    la classe Notify me sert pour l'ensemble du message, la classe tag pour chaque tag que je peux avoir dedans.


    mais le problème, comment lier les deux ? Comment dire à la classe Notify quelle peut avoir un ou plusieurs objets de type Tag, mais que c'est le parseur qui décidera combien ?


    en résumer, ça donne comment parser correctement ce message de m**** ?

    merci d'avoir lu jusqu'ici et d'essayer de m'aider.

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    j'ai pas tout compris.

    Sinon tu peut essayer xerces-c.
    http://xml.apache.org/xerces-c/

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 44
    Points : 13
    Points
    13
    Par défaut
    En fait, on m'a aidé par une autre voie !

    j'essayais de faire un list<Tag> taglist dans mon Notify, mais ça marche vachement moins bien si j'oublie le #include<list>

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 44
    Points : 13
    Points
    13
    Par défaut
    j'ai un nouveau petit problème sur le même coin de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void Notify::set_tag_list(std::list<Tag> Tag_List)
    {
        TagList=Tag_List;
    }
    j'ai ce petit bout de code qui est bon sans l'être; il est juste syntaxiquement, mais si j'ai le malheur de faire un clear de Tag_List, je me retrouve avec TagList qui pointe sur un truc null.

    Il me faudrait donc faire un truc genre constructeur de copie, mais j'ai pas trouvé pour une classe list.

    j'ai essayé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void Notify::set_tag_list(std::list<Tag> Tag_List)
    {
        TagList.clear();
        TagList=new std::list<Tag>(Tag_List);
    }
    mais le compilateur se mets à m'insulter !
    quelqu'un a une idée ???

  5. #5
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Je ne comprend pas, ton premier bout de code devrait fonctionner. L'opérateur = de la classe std::list effectue bel et bien une copie.
    Je viens de tester, et je ne rencontre pas le problème dont tu parles.

    Quant à ton 2eme bout de code, l'erreur vient du faire qu'un new renvoie un pointeur.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  6. #6
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 44
    Points : 13
    Points
    13
    Par défaut
    ah bon il fait un copie ?

    alors parfait, on m'avait dit que c'était pas le cas, c'est pour ça !

    enfin, parfait non, ça résoud pas mon problème derrière, mais au moins ça lève un doute

    merci bien !

  7. #7
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par wadcyr8_197
    ça résoud pas mon problème derrière
    Et quel est le problème derrière?
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  8. #8
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut
    Peut etre avec un pointeur :

    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
    std::list<Tag> *TagList = NULL;
    
    void Notify::set_tag_list(std::list<Tag> *Tag_List)
    {
        if (TagList) 
        {
            TagList->clear();
    
            // pas sûr que ce soit utile, depend de ce que tu veux
            delete TagList;
        }
    
        TagList=Tag_List;
    }

  9. #9
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 44
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par r0d
    Et quel est le problème derrière?
    je parse des infos xml et les fous dans une liste d'objet, mais j'avais un problème, c'est qu'il me garde tout le temps le même objet
    en clair ça donne : j'obtiens une liste qui contient n fois le même objet plutot qu'une liste de n objets différents.

  10. #10
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    TinyXml est parfait pour ce que tu veux faire, en effet.
    En revanche, tu ne donnes pas assez de détails pour que je puisse t'aider.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  11. #11
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 44
    Points : 13
    Points
    13
    Par défaut
    c'est bon j'ai résolu mon problème !
    j'utilisais TinyXML, mais en fait, comme je faisais un boucle sur mon "parsage", vus que je recevais plusieur document XML, il fallait que je détruise mon TiXmlDocument et que je le reconstruise à chaque boucle sinon il ne réécrit pas dessus

Discussions similaires

  1. Ajout d'objet dans une classe
    Par Zorgloub dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/02/2008, 21h04
  2. Ajout d'un objet dans une classe
    Par Zorgloub dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/01/2008, 11h16
  3. [POO] Un objet dans une classe
    Par Arnich dans le forum Langage
    Réponses: 6
    Dernier message: 25/11/2007, 22h46
  4. Réponses: 8
    Dernier message: 12/04/2007, 11h32
  5. [POO] import d'objet dans une classe
    Par wdionysos dans le forum Langage
    Réponses: 3
    Dernier message: 01/04/2006, 21h05

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