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 :

Problem de Map et de List


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2003
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 24
    Points : 22
    Points
    22
    Par défaut Problem de Map et de List
    Bonjour a tous,

    J'ai le bout de code suivant, qui ajoute un element dans une liste contenue dans une Map, verifie la valeur qui y est mise, puis affiche l'ensemble du contenu de la map.

    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
    //inserer l'element
    _recordRulesMap[record].push_back(ProcessingRule(offset,length,processing.c_str()[0],callback));
     
    //Verfier la valeur de l'element insere
    ProcessingRule rule=*(_recordRulesMap[record].rbegin());
    DEBUG("Rule : " << record <<":"<< rule._offset <<"-"<< rule._length <<"/"<< rule._processing << "-"<<rule._callback<<"\n");
     
    map<string, list<ProcessingRule> >::iterator itMap;
    list<ProcessingRule>::iterator itList;
    int number=0;
     
    //Parcourir la map
    for(itMap=_recordRulesMap.begin(); itMap!=_recordRulesMap.end(); itMap++)
    {
        //Parcourir toute la liste
        for(itList=itMap->second.begin(); itList!=itMap->second.end(); itList++)
        {
             //Afficher la valeur de l'objet
             ProcessingRule myRule = *(itList);
             DEBUG("Rule "<<++number<<" found: " << (*itMap).first <<":"<< myRule._offset <<"-"<< myRule._length <<"/" << myRule._processing << "-"<< myRule._callback<<"\n");
     
         }
     
    }
    Il se trouve que l'output me donne la chose suivante si j'ai 2 objet ProcessingRule dans la map:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     Rule : 01:91-13/ -0
    Rule 1 found: 01:8917048-0/ -0
     
    Rule : 01:107-49/ -0
    Rule 1 found: 01:8918560-0/ -0
    Rule 2 found: 01:8918560-0/ -0
    J'ai l'impression que je n'accede pas comme il faut a l'element lorsque je parse toute la map.

    Je seche severe, parce qu'il ne me semble pas que je me sois planter dans les pointeurs... Or c'est tres surement le cas.

    Merci beaucoup pour l'aide que vous pourriez m'apporter,
    Roming22

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Et... Qu'est-ce qui est incorrect dans tout ça au juste ? Parce que le code autant que la sortie ont l'air bons.

    Tu peux donner la sortie attendue ?

    [Edit] Le Rule inséré dans la map ne correspond pas à l'original c'est ça ? Tu peux commencer par vérifier ton constructeur par copie et ton opérateur d'affectation.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2003
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 24
    Points : 22
    Points
    22
    Par défaut
    Merci pour ton commentaire

    Ce que je ne comprends pas, c'est que juste après l'avoir inséré, j'ai bien les valeurs que j'attends quand je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ProcessingRule rule=*(_recordRulesMap[record].rbegin());
    alors que trois ligne plus loin, je fais exactement la même chose (tout du moins ilme semble que c'est la même chose, si ce n'est pas le cas, je veux bien une petite explication)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ProcessingRule myRule = *(itList);
    et là, paf, mes valeurs ne sont plus initialisées pareil.

    De mémoire mon constructeur par copy est le suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ProcessingRule(const ProcessingRule& iRule)
    {
      offset=iRule.offset;
      length-iRule.length;
      processing=iRule.processing;
      callback=iRulle.callback;
    }
    Je n'ai pas surchargé d'operateur d'affectation. Les quatres variables de la classe ProcessingRule sont de type int et char, et ne sont pas des pointeurs. Donc normalement, je n'ai pas besoin de le surcharger n'est-ce pas?

    Voici l'output que je recherche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Rule : 01:91-13/ -0
    Rule 1 found: 01:91-13/ -0
     
    Rule : 01:107-49/ -0
    Rule 1 found: 01:91-13/ -0
    Rule 2 found: 01:107-49/ -0
    Merci pour ton aide
    Roming22

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    length-iRule.length;
    Faute dans le message ou dans le code ?

    Sinon effectivement tu n'as pas besoin d'écrire l'opérateur d'affectation, d'ailleurs le constructeur par copie non plus.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2003
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 24
    Points : 22
    Points
    22
    Par défaut
    La faute est dans le message <img>

    Par contre, mon constructeur par copie etait le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    ProcessingRule(const ProcessingRule& iRule)
    {
      ProcessingRule(iRule.offset,iRule.length,iRule.processing,iRule.callback);
     
    }
     
    ProcessingRule (int offset, int length, char processing, int callback)
    {
       _offset=offset;
       _length=length;
       _processing=processing;
       _callback=callback;
    }
    Visiblement, c'etait pas bon... Ca devait me construire un nouvel objet. Hors je pensais que ca me mettrait a jour mon objet.

    J'ai donc changer mon constructeur par copie par celui que j'ai mis plus haut, et ca marche comme il faut.

    Merci beaucoup pour ton aide.
    Roming22

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Effectivement

    http://c.developpez.com/faq/cpp/?pag...R_appel_chaine

    Mais comme je te l'ai dit, ton constructeur par copie ne sert à rien.

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

Discussions similaires

  1. probleme de selection dans une liste deroulant
    Par biboulou dans le forum IHM
    Réponses: 5
    Dernier message: 04/05/2006, 12h16
  2. [hibernate] probleme de mapping un-vers-plusieurs
    Par Elmilouse dans le forum Hibernate
    Réponses: 2
    Dernier message: 12/04/2006, 13h37
  3. Probleme d'evaluation sur une liste numérique
    Par cryptorchild dans le forum Langage
    Réponses: 2
    Dernier message: 16/01/2006, 19h39
  4. Un petit probleme de map()
    Par cryptorchild dans le forum Langage
    Réponses: 2
    Dernier message: 04/12/2005, 13h00
  5. [LG]probleme d'ajout dans une liste chainée...
    Par misteryann dans le forum Langage
    Réponses: 5
    Dernier message: 08/03/2004, 20h28

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