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

SL & STL C++ Discussion :

Initialiser une liste dans une strucuture


Sujet :

SL & STL C++

  1. #1
    Invité
    Invité(e)
    Par défaut Initialiser une liste dans une strucuture
    Bonjour à tous !

    J'utilise des structures dans un programme et pour une j'ai besoin d'utiliser une list. Voici la structure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    typedef struct Menu
    {
    char *menu;
    list<struct Menu *> childrenList;
    } ItemMenu;
    Le problème est que lorsque je déclare une variable de type ItemMenu :
    Je ne peux pas utiliser ma childrenList pour faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void maFonction(ItemMenu *root, ItemMenu *child)
    {
    root->childrenList.push_back(child);
    }
    je ne peux pas insérer d'element car childrenList n'est pas initialisée.

    Comment puis-je l'initialiser ?

    Merci beaucoup.

    Jm

  2. #2
    Membre éclairé Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Points : 823
    Points
    823
    Par défaut
    Bonsoir,

    Mongaulois m'a aidé il y a peu sur le sujet, c'est sur le fil: "memcpy() en C++". On peut initialiser une structure de la même façon qu'un objet. Vas voir sur l'autre fil, c'est très clair.

  3. #3
    Invité
    Invité(e)
    Par défaut marche pas avec initialisation dans la structure
    Bonjour,

    Je viens de lire les conseils avec une initialisation dans la structure mais ca ne marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    typedef struct Menu
    {
      wxMenu *menu;
      char *menuName;
      int menuId;
      int function;
      list<struct Menu *> childrenList;
     
      Menu():childrenList(){}
    } ItemMenu;
    Le problème viens du fait que la liste n'est pas initialisée. N'y aurait il pas une solution comme par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    list<struct Menu *> childrenList = new list();
    ?

    Cordialement,

    JM

  4. #4
    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
    Bonjour,
    en c++ t'as structure(qui devrait plustôt etre une class) ressemblerai plustôt as

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    struct Menu
    {
      wxMenu *m_pItemMenu;
      std::string m_menuName;
      int m_menuId;
      int m_function;
      std::list<ItemMenu *> m_childrenList;
     
      Menu():m_pItemMenu(0),m_menuId(0),m_function(0){}
    } ;
    t'as liste est initialisé à zero l'ors de la création d'une instance. Ou as tu un problème?

  5. #5
    Invité
    Invité(e)
    Par défaut
    Cette structure est dans MenuBuilder.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
    19
    20
    21
    22
     
    struct Menu
    {
      wxMenu *m_pItemMenu;
      std::string m_menuName;
      int m_menuId;
      int m_function;
      std::list<ItemMenu *> m_childrenList;
     
      Menu():m_pItemMenu(0),m_menuId(0),m_function(0){}
    } ;
     
    class MenuBuilder()
    {
    public:
    //methode1 ..
    //methode2...
    //...
     
    private:
    list<Menu *> menuList;
    }
    dans un main.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    MenuBuilder *myMenuBuilder = new MenuBuilder();
     
    Menu *menu1 = (Menu*)malloc(sizeof(Menu));
    //initialisation des champs de menu1...
     
    myMenuBuilder->menuList.push_back(menu1);
     
    Menu *menu1_2 = (Menu*)malloc(sizeof(Menu));
    //initialisation des champs de menu1_2...
     
    //Le problème est ici
    menu1.m_childrenList.push_back(menu1_2);
    Dans le main, je suis d'accord que menuList est initialisée à vide, pas de problèmes. Mais pour le liste m_childrenList de menu1 elle n'est pas initialisée et donc on ne peut pas ajouter menu1_2 dans m_childrenList de menu1.

    J'espère que vous pouvez bien comprendre mon exemple.

    Jm

  6. #6
    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
    En c++ un struct est une class ou tout est public!!!!
    En C++ il est fortement déconseiller d'utiliser malloc
    ceci ne marche pas....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Menu *menu1 = (Menu*)malloc(sizeof(Menu));
    il faut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Menu menu1;
    Menu * pMenu2 = new Menu ;
    En gros, tu moment que t'as structure n'est composé que de int, char,pointeur,... tu peut utiliser les malloc. Mais dés qu'il y as une class, tu doit utiliser new.
    New alloue la memoire et appèle les constructeurs de chaque élément.
    Malloc ne fait qu'allouer la memoire

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 43
    Points : 31
    Points
    31
    Par défaut
    Il peut aussi y avoir des membres privée dans une structure ^^ mais on prefere generalement les classes pour s'en charger c'est sur !

  8. #8
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    En c++ un struct est une class ou tout est public!!!!
    Pas tout à fait,
    • Une structure possède une visibilité "public" par défaut
    • Une classe possède une visibilité "private" par défaut

    Bon je chipote, mais bon...

  9. #9
    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
    Citation Envoyé par poukill Voir le message
    Pas tout à fait,
    • Une structure possède une visibilité "public" par défaut
    • Une classe possède une visibilité "private" par défaut

    Bon je chipote, mais bon...
    ouaip un peu

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 43
    Points : 31
    Points
    31
    Par défaut
    ^^ oui c'est sur mais un forum est aussi fait pour apprendre des choses... certaines personnes n'etant pas au courant forcement de la chose :p

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

Discussions similaires

  1. une liste dans une liste?
    Par JerryOne3 dans le forum C#
    Réponses: 11
    Dernier message: 11/01/2009, 16h43
  2. quand je selectionne une valeur dans une liste, retourne une autre valeur
    Par nsqualli dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 29/12/2008, 14h23
  3. [débutant] Comment gérer une liste dans une liste
    Par Lenoiche dans le forum iReport
    Réponses: 0
    Dernier message: 16/07/2008, 10h41
  4. champ d'une liste lié à une liste dans un autre site
    Par guintolli dans le forum SharePoint
    Réponses: 8
    Dernier message: 08/07/2008, 14h51
  5. Appel d'une liste dans une liste (JSTL)
    Par abalgue dans le forum Hibernate
    Réponses: 4
    Dernier message: 15/06/2007, 10h56

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