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 :

Récuperer un objet d'une Map passée en paramètre d'une fonction


Sujet :

C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 20
    Points : 8
    Points
    8
    Par défaut Récuperer un objet d'une Map passée en paramètre d'une fonction
    S'il vous plait je suis fatiguée avec ce problème de map<int,MaClasse>.
    Je m'explique ,

    j'envois la méthode en param de sortie d'une fct
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void CVCTDlg::getMapOOP(std::map<int,oop*> &my)
    par la suite je la récupère dans une nouvelle classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
            std::map<int,oop*> my;
    	map<int,oop*>::iterator it;
            CString test;
     
     
           CVCTDlg *pDlg=( CVCTDlg *)GetParent();
           pDlg->getMapOOP(my);
    pour le test je crée une autre map , au niveau de cette classe ,avec les mêmes objets que pour la première
    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
    std::map<int,oop*> myy;
    	  int i;
    	  char s;
    	  i=1;
    	  s='t';
    	  oop op1(i,s);
    	  op1.age=26;
     
     
    	  i=2;
    	  s='e';
    	  oop op2(i,s);
    		op2.age=20;
     
    	  myy[1]=&op1;
     
    	  myy[2]=&op2;
    Malheureusement le même code de sortie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    test.Format("My map mimi %c d'age = %d \n",myy[1]->getName(),myy[1]->getAge());
    m_listeT.AddString(test);
    test.Format("My map mimi %c d'age = %d \n",myy[2]->getName(),myy[2]->getAge());
    m_listeT.AddString(test);
    me renvoie des résultats différents

    La map renvoyée par la fonction me donne des code chiffrés comme si le case pointée ?

    voici l'image qui expliques les sorties Merci

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 20
    Points : 8
    Points
    8
    Par défaut Solution
    finalement j'ai pu retrouver ce qui cloche.

    comme en c++ l'allocation dynamique de la mémoire se fait via "new objet()"

    j'ai appliqué ça au niveau de la création de mes objets tel que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     oop *op1 = new oop();
    	op1->age=26;
    Et le tour est joué

    Merci comme même

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Effectivement, ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	  myy[1]=&op1;
    	  myy[2]=&op2;
    [CODE]
    Tu stockes l'adresse d'une variable locale qui est supprimée lors de la sortie du bloc. En conséquence, la relecture de la valeur produit un résultat indéterminé.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    Merci pour la précision. et j'ajoute que c'est le fait que ça soit un appel dynamique -> espace mémoire dynamique aussi (puisque j'avais tester le même code en un seul bloc et ça a super bien marcher

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/11/2014, 16h44
  2. Réponses: 4
    Dernier message: 20/05/2006, 17h30
  3. Réponses: 2
    Dernier message: 21/04/2006, 12h09
  4. Réponses: 3
    Dernier message: 01/02/2006, 21h31
  5. Réponses: 4
    Dernier message: 05/10/2005, 18h19

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