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 :

Passer un objet en paramètre d'une callback


Sujet :

GTK+ avec C & C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 17
    Points : 11
    Points
    11
    Par défaut Passer un objet en paramètre d'une callback
    Bonsoir a tous.
    Alors voila, j'ai lu quelque part que l'on pouvait utiliser GTK+ en C++ sans problème.
    (Donc au passage si vous pouvez confirmer.)
    Alors mon problème est le suivant, j'aimerai faire passer un objet en paramètre d'une fonction callback.
    Je vous donne mes extraits de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // Creation du coutact avec les infos des GtkEntry
                contact nouveau( (string) gtk_entry_get_text(GTK_ENTRY(entreeNom)),
                                 (string) gtk_entry_get_text(GTK_ENTRY(entreePrenom)),
                                 (string) gtk_entry_get_text(GTK_ENTRY(entreeTelephone))
                                );
                // Connection lors du clic sur le bouton ajouter
                g_signal_connect (G_OBJECT (boutonAjouter), "clicked",G_CALLBACK (cb_ajouter_ajouter), &nouveau);
    Voila pour l'appel de la callback.
    Je pensais récupérer mon objet de la manière suivante par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void cb_ajouter_ajouter(GtkWidget  *widget, gpointer data)
    {
       contact *nouveauContact = (contact *) data;
       (*nouveauContact).aff();
    }
    Aucun problème pour la compilation, mais une belle segmentation fault lors de l'execution.
    Je ne vois pas conmment faire.
    Merci d'avance.
    kelepoc.

  2. #2
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par kelepoc Voir le message
    Alors voila, j'ai lu quelque part que l'on pouvait utiliser GTK+ en C++ sans problème.
    Oui, même si gtkmm est plus adapté.

    Citation Envoyé par kelepoc Voir le message
    Aucun problème pour la compilation, mais une belle segmentation fault lors de l'execution.
    Je ne vois pas conmment faire.
    Ton objet n'existe plus lorsque la fonction de rappel est appelée puisqu'il est local à la fonction. Utilise l'allocation dynamique pour résoudre le problème et garde une référence dessus pour pouvoir libérer la mémoire lorsque tu n'en a plus besoin

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Etant donné que ma classe n'est pas grande et pourrait aisément être remplacée par une structure, je voudrais savoir avant de plancher sur cette alloc et référence, si le problème serait également présent?
    Merci pour votre réponse.
    Kelepoc.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    Une classe et une struct, c'est pareil à 99%, donc oui, le problème sera exactement le même.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Ok merci à vous deux pour vos réponses.
    Je vais plancher sur la chose.
    Bonne journée.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Bonjour a vous.
    Me revoilà pour de nouvelles aventures.

    J'ai donc essayé, suite a vos conseils, de créer mon objet grâce a l'allocation dynamique de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    // Creation du contact avec les infos des GtkEntry
                contact *nouveau = NULL;
                nouveau = new contact(  (string) gtk_entry_get_text(GTK_ENTRY(entreeNom)),
                                        (string) gtk_entry_get_text(GTK_ENTRY(entreePrenom)),
                                        (string) gtk_entry_get_text(GTK_ENTRY(entreeTelephone))
                                     );
    Pour ce qui est de l'appel de la cb,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // Connexion lors du clic sur le bouton ajouter
                g_signal_connect (G_OBJECT (boutonAjouter), "clicked",G_CALLBACK (cb_ajouter_ajouter), nouveau);
    En effet, il me semble juste d'envoyer "nouveau" en paramètre, étant donné qu'elle contient l'adresse de mon objet créé dynamiquement. Pas d'erreurs?
    Pour finir, puisque nouveau contient l'adresse de mon objet, la fonction cb devrait être inchangée par rapport a mon post précédent?

    Tout compile bien, mais rien ce se passe à l'execution.
    Pouvez-vous me dire d'ou vient mon problème ?

  7. #7
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    Difficile de deviner comme ça.. Mets des g_print de ci de là dans ton code pour bien comprendre son cheminent et voir où ça diffère du comportement que tu attends.

  8. #8
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Points : 2 002
    Points
    2 002
    Par défaut
    Citation Envoyé par kelepoc Voir le message
    Etant donné que ma classe n'est pas grande et pourrait aisément être remplacée par une structure, je voudrais savoir avant de plancher sur cette alloc et référence, si le problème serait également présent?
    Une structure est une classe qui a ses membres publics par défaut, là où dans une classe ils sont protégés par défaut. C'est la seule différence.

    Et sur ton dernier exemple, effectivement on a quasiment rien comme code, donc je te conseille aussi de mettre des traces, par exemple des g_debug (G_STRLOC) pour avoir les numéros de lignes de là où tu passes. Ça se copie/colle très bien.

Discussions similaires

  1. Passer un objet en paramètre d'une servlet
    Par PoichOU dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 20/10/2014, 11h38
  2. Réponses: 5
    Dernier message: 13/07/2009, 14h42
  3. Réponses: 4
    Dernier message: 20/06/2007, 17h34
  4. Réponses: 3
    Dernier message: 22/05/2006, 09h58
  5. [POO] débutant passer un objet en paramètre
    Par samplaid dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 02/05/2006, 12h46

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