Debian Debian-France Debian-Facile Debian-fr.org Debian-fr.xyz Debian ? Communautés

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 26-01-2020 20:01:26

Clem
Membre
Lieu : Au coin du bois
Distrib. : Stable
Noyau : 4.9.0-4 *-amd-64
(G)UI : XMonad & Mate
Inscription : 09-03-2010

error: ‘GSList’ {aka ‘struct _GSList’} has no member named ‘A

Bonjour,
J'ai ce bout de code qui me fait suer :


if ((f) && (g))
    {
  while ( B =! NULL)
  {
      ecrire_char (f, B->A->justification);
      ecrire_num (g, B->A->montant);
      destr_maille (&B->A);;
      B = g_slist_remove (B, B->A);
  }
  g_slist_free(B);
    }
 



la compilation me renvoie :


list.c: In function ‘ecriture’:
list.c:95:12: error: assignment to ‘GSList *{aka ‘struct _GSList *} from ‘int’ makes pointer from integer without a cast [-Werror=int-conversion]
  while ( B =! NULL)
            ^
list.c:95:10: error: suggest parentheses around assignment used as truth value [-Werror=parentheses]
  while ( B =! NULL)
          ^
list.c:97:23: error: ‘GSList’ {aka ‘struct _GSList’} has no member named ‘A’
      ecrire_char (f, B->A->justification);
                       ^~
list.c:98:22: error: ‘GSList’ {aka ‘struct _GSList’} has no member named ‘A’
      ecrire_num (g, B->A->montant);
                      ^~
list.c:99:22: error: ‘GSList’ {aka ‘struct _GSList’} has no member named ‘A’
      destr_maille (&B->A);;
                      ^~
list.c:100:30: error: ‘GSList’ {aka ‘struct _GSList’} has no member named ‘A’
      B = g_slist_remove (B, B->A);
                              ^~
cc1: all warnings being treated as errors

 



B est une GSList et A un pointeur sur une stucture de deux champs (char* et int ). Cette structure A est le "data" de la liste.

Dernière modification par Clem (26-01-2020 21:30:45)


Moi, je suis PC (x86_64) et formater windows, c'était MON idée
Le sommeil de la raison ...

Hors ligne

#2 29-01-2020 14:11:29

kao
Modérateur
Distrib. : Testing
Noyau : Linux 4.quelquechose
(G)UI : Gnome 3
Inscription : 28-09-2012
Site Web

Re : error: ‘GSList’ {aka ‘struct _GSList’} has no member named ‘A

Peux tu nous montrer la déclaration de tes structures et comment tu initialises A et B ?
Regardes ici aussi : https://openclassrooms.com/fr/courses/1 … -variables
Cela te permettra de naviguer plus facilement dans les structures.

Hors ligne

#3 30-01-2020 00:23:33

Clem
Membre
Lieu : Au coin du bois
Distrib. : Stable
Noyau : 4.9.0-4 *-amd-64
(G)UI : XMonad & Mate
Inscription : 09-03-2010

Re : error: ‘GSList’ {aka ‘struct _GSList’} has no member named ‘A

La declaration de structure/


struct bourse
{
  char *justification;
  int montant;
  char saut;

};

typedef struct bourse * maille;
 


J'ai une fonction de lecture et une d'écritue et c'est cette derniere qui ne marche as je ne comprend pas.

J'initialise A(maille) ainsi:


maille create_maille (char *justification, int montant)
{

    maille A = malloc(sizeof(struct bourse));
    A->justification = justification;
    A->montant = montant;
    A->saut: "\n";

    return A;
}
 



Et l'intégralité de la fonction qui pose probleme:


void ecriture ( GSList* B, char* chemin_un, char* chemin_deux)
{

    FILE* f = fopen(chemin_un, "w");
    FILE* g = fopen(chemin_deux,"w");
   

    if ((f) && (g))
    {
  while ( (B) =! NULL)
  {
      ecrire_char (f, B->maille->justification);
      ecrire_num (g, B->maille->montant);
      destr_maille (*B->maille);;
      B = g_slist_remove (B, B->maille);
  }
  g_slist_free(B);
    }
    else
    {
  printf("Blabla");
    }

    fclose(f); fclose (g);

}

 



Elle vide au fur et a mesure le contenu de la liste dans deux fichiers jusqu'a l'extinction;

Dernière modification par Clem (30-01-2020 00:25:15)


Moi, je suis PC (x86_64) et formater windows, c'était MON idée
Le sommeil de la raison ...

Hors ligne

#4 30-01-2020 11:33:16

kao
Modérateur
Distrib. : Testing
Noyau : Linux 4.quelquechose
(G)UI : Gnome 3
Inscription : 28-09-2012
Site Web

Re : error: ‘GSList’ {aka ‘struct _GSList’} has no member named ‘A

Salut,
A quel moment tu déclares que B contient une structure de type maille ?
B->maille suggère que tu vas trouver un élément nommé "maille" dans la structure de type GSList*

Attention aussi quand tu déclares le typedef :
typedef struct bourse * maille;
C'est un coup à se mélanger les pinceaux (pointeur maille est en fait une structure bourse ????)
Fait plus simple, perso j'ajoute un préfixe pour reconnaître le type plus facilement.

struct S_bourse
{
  char *justification;
  int montant;
  char saut;

};
typedef struct S_bourse S_bourse;
#define MAX_CARACT 255

S_Bourse * initBourse (char *justification, int montant)
{

    S_Bourse * A = malloc(sizeof(S_Bourse));
    A->justification = malloc (MAX_CARACT) // pour avoir de la place si je remplace par un texte plus long ensuite
    A->justification = justification;
    A->montant = montant;
    A->saut: "\n";

    return A;
}

 


Ensuite pour la fonction écriture ça dépend se que tu veux faire et ce qu'attend  la structure de type GSList
https://gtk.developpez.com/cours/gtk2/?page=page_8

J'ai l'impression que que le pointeur data d'une GList peut prendre n'importe quelle type de pointeur, mais il faut le déclarer à un moment de donner
https://developer.gnome.org/glib/stable … Lists.html

Tu peux lire ça aussi pour comprendre ce qu'est une liste chaînée https://openclassrooms.com/fr/courses/1 … s-chainees

Hors ligne

#5 31-01-2020 05:35:40

Clem
Membre
Lieu : Au coin du bois
Distrib. : Stable
Noyau : 4.9.0-4 *-amd-64
(G)UI : XMonad & Mate
Inscription : 09-03-2010

Re : error: ‘GSList’ {aka ‘struct _GSList’} has no member named ‘A

kao a écrit :

A quel moment tu déclares que B contient une structure de type maille ?
B->maille suggère que tu vas trouver un élément nommé "maille" dans la structure de type GSList*


A partir de la fonctionn lecture la liste est censée contenir qqch:


GSList *lecture (char* chemin_un, char* chemin_deux)
{
  GSList *B = NULL;
  FILE* f = fopen(chemin_un, "r");
  FILE* g = fopen(chemin_deux,"r");
 
  if ((f) && (g))

  {
            while ((A->justification =! EOF) || (A->montant =! "\0"))
        {
      A = create_maille((lire_a(f)),(lire_num(g)));
      B = g_slist_append ( B,A);
        }
  }
  else
  {
    printf("hoho");
  }

  fclose(f); fclose(g);

  return B;
}

 


(J'aimerais pouvoir en plus faire entrer des données par l'utilisateur avec un  gtk_entry mais c'est un autre probleme);


Moi, je suis PC (x86_64) et formater windows, c'était MON idée
Le sommeil de la raison ...

Hors ligne

#6 15-02-2020 20:10:45

Clem
Membre
Lieu : Au coin du bois
Distrib. : Stable
Noyau : 4.9.0-4 *-amd-64
(G)UI : XMonad & Mate
Inscription : 09-03-2010

Re : error: ‘GSList’ {aka ‘struct _GSList’} has no member named ‘A

Je m'auto-répond.
Il siffisait juste d'utiliser la fonction:

gpointer
g_slist_nth_data (GSList *list,
                  guint n);

Moi, je suis PC (x86_64) et formater windows, c'était MON idée
Le sommeil de la raison ...

Hors ligne

Pied de page des forums