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 :

Ponteurs sur une structure.


Sujet :

GTK+ avec C & C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 81
    Par défaut Ponteurs sur une structure.
    Bonjour (encore moi :°) )

    Je ne comprend pas une erreur alors je pose un petit exemple :

    J'ai cette structure pour réaliser une liste chaînée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef struct maillon
    { 
    GtkWidget * label; 
    GtkWidget * event;
    struct maillon * precedent; 
    } maillon ;
    Et voici l'exemple qui me renvoie des erreurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    maillon * test1 = malloc (sizeof (maillon));
    test1->label = gtk_label_new ("Developpez.com!");
    printf ("%s",gtk_label_get_label (GTK_LABEL(test1->label))); // fonctionne
    maillon * test2 = test1;
    printf ("%s",gtk_label_get_label (GTK_LABEL(test2->label))); // erreur.
    Voilà c'est tout. J'ai cherché sur le net et dans les doc mais je ne vois pas ce que je fais de mal.
    Je continu a chercher et merci si vous prenez le temps de me répondre.

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 392
    Par défaut
    Si ce code exact ne marche pas, c'est qu'il y a vraiment un problème.
    Puisque test1 et test2 pointent vers la même structure, test1->label et test2->label devraient être non seulement égaux, mais surtout exactement la même donnée...

    PS: Vérifie que ce n'est pas un simple problème de printf(), et ajoute \n à la fin de ton format...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 81
    Par défaut
    Nop, le problème ne vient pas avec printf.

    Voici mon code d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (pep:5051): GLib-GObject-WARNING **: invalid unclassed pointer in cast to `GtkLabel'
     
    (pep:5051): Gtk-CRITICAL **: gtk_label_get_label: assertion `GTK_IS_LABEL (label)' failed
    Une idée ?

  4. #4
    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
    Par défaut
    Moi je viens de tester ton petit morceaux de code et sans aucun problème, j'ai juste utilisé les fonctions de la glib, ce qui est préférable mais pas obligatoire.

    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
    39
    40
    41
    42
    43
    #include <gtk/gtk.h>
    #include <glib/gprintf.h>
     
     
    typedef struct maillon
    {
       GtkWidget * label;
       GtkWidget * event;
     
       struct maillon * precedent;
    }
    maillon;
     
     
    int main (int argc, char ** argv)
    {
       GtkWidget * p_win    = NULL;
     
     
       gtk_init (& argc, & argv);
     
     
       p_win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
       g_signal_connect (
          G_OBJECT (p_win), "destroy",
          G_CALLBACK (gtk_main_quit), NULL
       );
     
     
       maillon * test1 = g_malloc (sizeof (* test1));
       test1->label = gtk_label_new ("Developpez.com!");
       g_printf ("%s\n",gtk_label_get_label (GTK_LABEL(test1->label)));
       maillon * test2 = test1;
       g_printf ("%s\n",gtk_label_get_label (GTK_LABEL(test2->label)));
       g_free (test1);
     
     
       gtk_widget_show_all (p_win);
       gtk_main ();
     
     
       return 0;
    }
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 81
    Par défaut
    Arf !!! aie aie aie ... 8P

    En fait je déclare un pointeur en global s'appelant Pcourant.

    Ensuite j' ai une fonction, dont le nom du pointeur passé en paramètre est : Pcourant !!


    Je me suis fait avoir par le défaut des globales.

  6. #6
    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
    Par défaut
    Citation Envoyé par echantillon
    Arf !!! aie aie aie ... 8P

    En fait je déclare un pointeur en global s'appelant Pcourant.

    Ensuite j' ai une fonction, dont le nom du pointeur passé en paramètre est : Pcourant !!


    Je me suis fait avoir par le défaut des globales.
    Bin même si c'est un programme de teste, il faut éviter autant que faire se peut les globales !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 81
    Par défaut
    Bonjour,

    Oui je sais pour les globales, et j'ai appris à les fuires autant que possible.

    Mais que proposes tu pour donner a mes fonctions callback un accès a des données ?

    Un pointeur sur une structure, qui contiendrais une panoplie de pointeurs sur les pointeurs dont j'ai besoin ?

    J'aimerais beaucoup que tu me donnes une méthode .

    EDIT : Je tiens a rassurer: Pour l'instant, lorsque je veux passer des données a mes fonctions callback c'est ce que je fais, les structures.
    Mais ce n'est vraiment pas souple.

  8. #8
    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
    Par défaut
    Citation Envoyé par echantillon
    Un pointeur sur une structure, qui contiendrais une panoplie de pointeurs sur les pointeurs dont j'ai besoin ?
    Oui c'est ce que je fait tout le temps. Le mieux est de définit une structure pour chaque interfaces (fenêtres) de ton programme.

    Ce que je fait également lorsque j'ai du mal à passer par autre chose que des globales, je créé un fichier qui regroupe toutes les variables globales du projet et je les mets en privées dans le module.

    Ce que je met en publique dans ce module spécial, ce sont des fonctions ou plus communément appelé: getters/setters (accesseurs/modificateurs). Une paire pour chaque variables, comme on a l'habitude de le faire en POO.

    Cette manière de faire est un peu plus éléguante que des variables globales mises à l'arrache dans plusieurs modules.
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 81
    Par défaut
    "Le mieux est de définit une structure pour chaque interfaces (fenêtres) de ton programme."

    Je crois que c'est ce que je vais faire.

    Finalement cela revient a imbriquer des variables/pointeurs dans une structure pour rendre plus difficile leur accès, et plus explicite leurs fonctions.

    Ensuite je suppose que ma structure grandie au fur et a mesure que je créé des widgets.

    Merci ;°)

    (tiens au fait c'est bizarre ce forum; des fois je tutoie et des fois je vouvoie les mêmes personnes..)

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

Discussions similaires

  1. avis sur une structure css
    Par sardo dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 13/03/2007, 17h19
  2. [Structure] Aide sur une structure XML (et le vocabulaire associé)
    Par projetdk40 dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 14/02/2007, 10h38
  3. vecteur sur une structure
    Par sam_123 dans le forum C++
    Réponses: 6
    Dernier message: 25/01/2006, 07h30
  4. Memset sur une structure
    Par ghostdogpr dans le forum C
    Réponses: 4
    Dernier message: 16/12/2005, 13h43
  5. Réponses: 2
    Dernier message: 13/12/2005, 16h48

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