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 :

3 petites erreurs | vois pas!


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 3 petites erreurs | vois pas!
    Bonjour a tous,

    Voilà plusieurs semaines que je travail sur un programme glade/c,
    ..et voilà plusieurs semaines que je traîne quelques erreurs (n'empêchant pas mon programme de tourner, et donc d'avancer sur autre chose) innérantes a mes premiers pas sous gtk.

    Je vous les poste le plus clairement possible,
    en espérant que vous ayez le soin de m'indiquer la route!



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ...
    const char * mode_repertoire;
    ...
    void
    on_mode_changed                        (GtkEditable     *editable,
                                            gpointer         user_data)
    {
        mode_repertoire = gtk_entry_get_text(GTK_EDITABLE(editable));
    }
    ...
    "attention : passage de l'argument n°1 de « gtk_entry_get_text » d'un type pointeur incompatible"



    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
    ...void
    on_parcourir_clicked                   (GtkButton       *button,
                                            gpointer         user_data)
    {
        GtkWidget * selecteur = create_mode_selecteur(); //creat_mode_selecteur est la boite de selection de dossier.
        switch (gtk_dialog_run(GTK_DIALOG(selecteur)))
        {
            case GTK_RESPONSE_OK: 
                mode_repertoire = (gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(selecteur)));
                gtk_widget_destroy(selecteur);
                gtk_entry_set_text(GTK_LABEL(entry_mode), mode_repertoire);
     
            case GTK_RESPONSE_CANCEL:
                gtk_widget_destroy(selecteur);
        }
    }
    ...
    "attention : passage de l'argument n°1 de « gtk_entry_set_text » d'un type pointeur incompatible"

    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
    ...
    extern check_spec;
    ...
    void souvenir()
    {
      char * mot = malloc(50);
      FILE * f = fopen(sh,"r");
     
      if (mot == NULL)
      {
        fprintf(stderr,"\nmalloc failure. \n\n");
        fclose(f), f == NULL, 
        free(mot);
        exit(EXIT_FAILURE);
      }
     
      if (f == NULL)
      {
        fprintf(stderr,"\nfopen failure. \nIt's not obligatorily an error if you run Hodierna for the first time. \n\n");
      }
      else
      {
        while ( fscanf(f,"%s",mot) != EOF )
        {
          if (!strcmp(mot,"-spec")) gtk_toggle_button_set_active (check_spec, TRUE);
     
        }
      free(mot), mot == NULL;
      fclose(f), f == NULL;
      }
     
    }
    et encore "attention : passage de l'argument n°1 de « gtk_toggle_button_set_active » d'un type pointeur incompatible"

    voilà.
    J'ai lu la doc, plusieurs fois, en long, en travers et a l'envers!
    Et dans tout les sens j'ai forcement loupé quelque chose.
    Un peu d'aide serait la bien venue :°)

  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
    Par défaut
    Bonjour,

    C'est parce que tu n'utilise pas le bon type d'objet :
    • Pour gtk_entry_get_text il utiliser GTK_ENTRY et non GTK_EDITABLE
    • Pour gtk_entry_set_textil utiliser GTK_ENTRY et non GTK_LABEL
    • Pour gtk_toggle_button_set_active c'est GTK_TOGGLE_BUTTON


    Comme tu peux le constater le début des noms de fonctions correspond au type de l'objet à passer en premier paramètre. Si la variable n'est pas de type GtkXxx il faut la transformer grace a une macro de la forme GTK_XXX.

    Et attention tu semble utiliser beaucoup de variables globales, ce n'est pas une bonne pratique : http://emmanuel-delahaye.developpez....s.htm#globales

  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
    Merci;

    "Pour gtk_toggle_button_set_active c'est GTK_TOGGLE_BUTTON
    Si la variable n'est pas de type GtkXxx il faut la transformer grace a une macro de la forme GTK_XXX"

    oups, là j'avais oublié.

    Du coup tout fonctionne, mais tu soulève un problème qui me tanaît depuis longtemp:
    Pour que deux fonctions différentes utilisent la même variable il faut bien que celle-ci soit en globale ?

    (J'explique vite fait mon programme pour être un peu plus clair:
    On m'a donné l'idée de créer un lanceur, sous linux, pour le jeu freespace2 dont la configuration et le lancement sont assez austères.
    Je décide de bien faire ça, et d'intégrer toutes les fonctions possibles au lanceur : http://www.hard-light.net/wiki/index...Line_Reference
    Mon lanceur : http://download.yousendit.com/96B9EA8B76F4BFBC,
    je travail en attendant sur la mémorisation des bouttons, après fermeture/ouverture)

    Il créer un script contenant toutes les options choisies par l'utilisateur.
    Pour l'exemple de l'option -spec je déclare :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ..
    char * spec = "";
    ..
    void
    on_spec_toggled                        (GtkToggleButton *togglebutton, 
                                            gpointer user_data)
    {
       if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(togglebutton))) spec = "  -spec";
       else spec = "";
     
    } 
    ..
    Puis dans une fonction appelée par un clic sur "lancer le jeu" , j' inscrit spec dans le fichier du script.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //onglet 1
    fprintf(f,"%s%s%s%s..",spec,glow...)
    Je fais ça pour la bonne centaine d'option que j'ai.
    Bien que ça marche je cherchait justement une astuce pour ne pas initialiser toutes ses globales.
    Je ne vois pas comment faire autrement.

  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
    Peut-être une structure dont tu déclares une variable de ce type et dont tu passes l'adresse l'adresse à chacun de tes callback traitant une donnée de cette structure ! La structure renfermerais toutes les options en fait.

    A voir, j'ai pas tout suivi mais il est clair qu'il vaut mieux passer par des arguments que par des 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 !

Discussions similaires

  1. Je ne vois pas l'erreur:( qlq pourra m'aider !
    Par moonia dans le forum Langage
    Réponses: 23
    Dernier message: 18/05/2006, 14h55
  2. Je ne vois pas l'erreur...
    Par nunurs83 dans le forum C
    Réponses: 21
    Dernier message: 16/05/2006, 21h47
  3. Beuggouillage...je vois pas l'erreur
    Par Force_Rouge dans le forum C
    Réponses: 3
    Dernier message: 29/03/2006, 11h12
  4. Clé etrangere erreur 150 mais je vois pas l'erreur
    Par HurtMarley dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 03/05/2005, 16h57
  5. Je vois pas d'où vient mon erreur!! Aidez moi SVP
    Par liliboms dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 04/04/2005, 08h25

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