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

GTK+ avec C & C++ Discussion :

Récupérer une structure depuis une liste


Sujet :

GTK+ avec C & C++

  1. #1
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 287
    Points : 208
    Points
    208
    Par défaut Récupérer une structure depuis une liste
    Bonjour,

    Je cherche un moyen pour récupérer une donnée d'un GList. La donnée en question est une structure, ce qui ne devrait dont pas différer de tout autre type de données.
    Pourtant j'ai essayé plusieurs choses sans succès. Pouvez-vous me dire si la manipulation du gpointer récupéré est bonne ?
    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
     
    GList *ma_liste;
    //initialisation
    ma_liste = NULL;
     
    //ajout d'éléments de cette façon
    GList *tmp;
    mon_type *ma_struct;
     
    tmp = g_list_append(ma_liste, (mon_type *) ma_struct);
    if(tmp != NULL)
    ma_liste = tmp;
     
    //récupération d'une structure
    gpointer tmp;
    mon_type *struct_recuperee;
     
    //récupération du 2eme élément de la liste
    tmp = g_list_nth_data(ma_liste, 1);
     
    struct_recuperee = (mon_type *) tmp;
     
    // ... travail sur la structure
    Voila voila, merci de vos réponses

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Pour commencer, pour l'ajout dans une liste tu n'es pas obligé de passer par un pointeur temporaire, tu peux très bien faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ma_liste = g_list_append(ma_liste, ma_struct);
    Et pour la donnée à récupérer oui ca devrait aller mais tu peux faire plus court:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mon_type *struct_recuperee = (mon_type *) g_list_nth_data(ma_liste, 1);
    Normalement ceci devrait fonctionner ! Au pire, post un code réduit au minimum mais compilable et cernant le problème !

  3. #3
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Un petit exemple vaut mieux parfois qu'un long discours:
    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
    32
    33
    34
    35
    36
    37
    38
    #include <glib.h>
    #include <glib/gprintf.h>
     
     
    typedef struct
    {
       int index;
    }
    my_st;
     
     
    int main (void)
    {
       GList * my_list = NULL;
       my_st * st1 = g_malloc (sizeof (* st1));
       my_st * st2 = g_malloc (sizeof (* st2));
       my_st * st_tmp = NULL;
     
     
       if (st1 != NULL && st2 != NULL)
       {
          st1->index = 10;
          st2->index = 20;
     
          my_list = g_list_append (my_list, st1);
          my_list = g_list_append (my_list, st2);
     
          st_tmp = (my_st *) g_list_nth_data (my_list, 1);
          g_printf ("%d\n", st_tmp->index);
     
     
          g_free (st1);
          g_free (st2);
       }
     
     
       return 0;
    }
    Ceci fonctionne très bien !

  4. #4
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 287
    Points : 208
    Points
    208
    Par défaut
    j'avais oublié de répondre mais ça marchait parfaitement pour moi suite à ta premiere réponse

    Merci

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/10/2015, 17h16
  2. [AC-2007] Copier une table depuis une base vers une autre
    Par Triton972 dans le forum VBA Access
    Réponses: 3
    Dernier message: 01/11/2009, 19h27
  3. Réponses: 5
    Dernier message: 12/10/2008, 13h41
  4. Récupérer le nom d'une colonne d'une table dans une variable
    Par mimi51340 dans le forum Général Java
    Réponses: 4
    Dernier message: 13/03/2008, 14h23
  5. Réponses: 3
    Dernier message: 16/01/2006, 16h02

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