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 :

Fonction qui renvoie une liste


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Par défaut Fonction qui renvoie une liste
    Bonjour a tous, je désire réaliser une fonction qui crée une liste qui contient le nom des fichiers contenu dans un répertoire. A la fin je renvoie la liste cependant a la compilation j'ai deux erreurs qui résiste.

    Voici le code de la fonction :

    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
    GList liste_fichiers()
    {
        /// Variables
    
        GDir *repertoire;
        GtkListStore *liste;
        gchar *nom;
    
        /// Instructions
    
        liste = gtk_list_store_new(1, G_TYPE_STRING);
        repertoire = g_dir_open(Selection_repertoire(),0,NULL);
    
        if(repertoire)
        {
    70 :   while (nom = g_dir_read_name(repertoire) ) 
                {
                    nom = g_malloc(40);
                    GtkTreeIter *iteration;
                    gtk_list_store_append(liste, iteration);
                    gtk_list_store_set(liste, iteration,TEXT_COLUMN, nom,-1);
                    g_free(nom);
                }
    
            g_dir_close(repertoire);
    
    81 :    return liste;
        }
    
    
    } // fin de la fonction liste_fichiers
    Voici les erreurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ligne 70 : warning: assignment discards qualifiers from pointer target type
    ligne 81 : error : incompatible types in return

  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 : 48
    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 la_praline
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ligne 70 : warning: assignment discards qualifiers from pointer target type
    ligne 81 : error : incompatible types in return
    ligne 70 :
    La fonction g_dir_read_name renvoie un const gchar *, toi ton pointeur nom est de type gchar * !

    ligne 81 :
    Normal, ta fonction renvoie une GList mais il faut en fait renvoyer un pointeur sur une GList donc la signature de ta fonction n'est pas correcte, voici la bonne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GList * liste_fichiers (void)
    Par ailleurs je ne vois pourquoi tu as déclaré liste ainsi:
    Tu veux remplir une GList mais tu utilises un GtkListStore ce qui est complètement différent, tu confond tout là, il faut reprendre des cours de toute urgence. Déclare ta liste ainsi:
    et adapte ton code par rapport aux fonctions de cette liste ! Ton code est par conséquent complètement faux
    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 !

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Par défaut
    En réalité c'est une GtkListStore que je désire créer (c t completement faux en effet une fois kon relis) avec dedans tous les noms de fichiers récupérer a partir du répertoire voila ce que ca donne désormais mais j'ai un plantage lors de l'éxécution de la fonction.

    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
     
    GtkListStore *liste_fichiers()
    {
        /// Variables
     
        GDir *repertoire;
        GtkListStore *liste;
        const gchar *nom=NULL;
     
        /// Instructions
     
        liste = gtk_list_store_new(1, G_TYPE_STRING);
        repertoire = g_dir_open(Selection_repertoire(),0,NULL);
     
        if(repertoire)
        {
            while (nom = g_dir_read_name(repertoire) )
                {
                    GtkTreeIter *iteration;
                    gtk_list_store_append(liste, iteration);
                    gtk_list_store_set(liste, iteration,TEXT_COLUMN, nom,-1);
                }
     
            g_dir_close(repertoire);
     
            return liste;
        }
     
     
    } // fin de la fonction liste_fichiers

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Par défaut
    J'ai du mal ac les listes donc il se pourrait qu'il y ai encore des betises dans ce code !!

  5. #5
    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 : 48
    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 la_praline
    J'ai du mal ac les listes donc il se pourrait qu'il y ai encore des betises dans ce code !!
    Oui y'a quelques bétises, voici la correction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                    GtkTreeIter iteration;
                    gtk_list_store_append(liste, & iteration);
                    gtk_list_store_set(liste, & iteration,TEXT_COLUMN, nom,-1);
    Voilà, en fait il ne faut pas déclarer de pointeur sur un GtkTreeIter mais passer l'adresse d'une variable de type GtkTreeIter aux fonctions
    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 !

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Par défaut
    J'ai avancé ma fonction désormais ma liste est intégré a ma table mais j'ai deux soucis déja il faut ke je dois éxécuter la fonction a l'ouverture car sinon je trouve pas de moyen de recharger une table deja existante !! L'autre soucis c que la liste n'affiche aucun chemin de fichier je comprend pas pourquoi !!

    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
    44
    45
    46
    47
    48
    49
    50
     
    GtkWidget *liste_fichiers(GtkWidget *table)
    {
        /// Variables
     
        GDir *repertoire;
        GtkListStore *liste;
        GtkWidget *vue;
        GtkTreeViewColumn *vue_colonne;
        GtkCellRenderer *colonne;
        GtkWidget *barre_defil;
        const gchar *nom=NULL;
     
        /// Instructions
     
        liste = gtk_list_store_new(1, G_TYPE_STRING);
        repertoire = g_dir_open(Selection_repertoire(),0,NULL);
     
        if(repertoire)
        {
            while (nom = g_dir_read_name(repertoire) )
                {
                    GtkTreeIter *iteration;
                    gtk_list_store_append(liste,&iteration);
                    gtk_list_store_set(liste,&iteration,TEXT_COLUMN, nom,-1);
                }
     
            g_dir_close(repertoire);
     
            vue = gtk_tree_view_new_with_model(GTK_TREE_MODEL(liste));
     
            /// Creation de la colonne
     
                colonne = gtk_cell_renderer_text_new();
                vue_colonne = gtk_tree_view_column_new_with_attributes("Titre",colonne,"text", TEXT_COLUMN,NULL);
     
            /// Ajout de la colonne à la vue
     
                gtk_tree_view_append_column(GTK_TREE_VIEW(vue), vue_colonne);
     
            /// Ajout de la vue a la fenetre
     
                barre_defil = gtk_scrolled_window_new(NULL, NULL);
                gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(barre_defil),GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);
                gtk_container_add(GTK_CONTAINER(barre_defil), vue);
                gtk_table_attach_defaults(GTK_TABLE(table), barre_defil, 20,35,2,22);
     
            return table;
        }
    } // fin de la fonction liste_fichiers
    Est ce que les chemins de fichiers sont dans un format que je peux afficher ?? Dois je les caster ??

  7. #7
    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 : 48
    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
    En fait il faudrait voir pour faire un peu autrement car tu met transmet le pointeur nom mais celui-ci est mis à jour à chaque tout de boucle ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (nom = g_dir_read_name(repertoire) )
    Ca se répercute donc sur les autres éléments précédemment enregistrés ! Il faudrait peut-être allouer à chaque fois une nouvelle adresse pour la chaîne de caractères que tu récupères à chaque tour de boucle à l'intérieur de la boucle.

    Un nouveau pointeur sur char suffit avec une allocation dynamique de la taille de la chaîne pointée par nom en ajoutant 1 au résultat pour le zéro de fin de chaîne puis tu passes alors ce pointeur à la fonction gtk_list_store_set !

    Il ne faudra bien sûr pas oublier de libérer toutes ces chaînes de caractères à la fin du programme, tu peux très facilement créer une fonction pour le faire à partir bien sûr de ton GtkListStore.
    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 !

  8. #8
    Membre éclairé
    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
    Par défaut
    il y a encore une erreur non ?
    sur le GtkTreeIter *iteration. Il suffit de mettre GtkTreeIter iteration je crois ?

Discussions similaires

  1. Réponses: 10
    Dernier message: 05/02/2015, 14h47
  2. Réponses: 6
    Dernier message: 28/04/2011, 14h19
  3. Changer une fonction qui utilise une liste par un tableau!
    Par sara21 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 03/05/2007, 13h18
  4. [?] Fonction qui renvoie une table
    Par Dimitri_87 dans le forum Oracle
    Réponses: 2
    Dernier message: 05/04/2007, 11h48
  5. [MySQL] Fonction qui génère une liste
    Par Marco85 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 30/03/2007, 13h37

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