[code C] dereferencing pointer to incomplete

Résolu
Utilisateur anonyme -  
 Utilisateur anonyme -
Salut, je suis en train de faire un projet que je dois rendre lundi matin et j'ai une erreur à la compilation que je ne comprends absolument pas.

Le compilateur (gcc) me dit "dereferencing pointer to incomplete type" à toutes le lignes qui contiennent un disc->
Voici le code:

/////////disque.c///////////

typedef struct cd {
char *artiste;
char *album;
int annee;
int nb_chansons;
char *genre;
T_LIST pistes;
} cd;

///////////////disque.h///////////////
typedef struct cd *disque;

/////////////fonct_aux.c////////////
void aff_disc_sans (disque disc) {

printf("\n------------------------------------\n");
printf("Artiste : %s\n", disc->artiste);
printf("Année de parution : %d\n", disc->annee);
printf("Album : %s\n", disc->album);
printf("------------------------------------\n");

}

Je ne vous mets pas le reste du code qui n'apporterait rien à mon avis.
T_LIST est une structure fournit par mes profs donc il n'y a aucun doute la concernant.

Merci d'avance.

2 réponses

  1. Hxyp Messages postés 401 Date d'inscription   Statut Membre Dernière intervention   54
     
    Bonjour
    void aff_disc_sans (disque disc) {
    ça ne devrait pas plutôt être :
    void aff_disc_sans (disque *disc) {
    ?
    j'ai testé comme ça :
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    typedef struct{
        char *x;
    }plop;
    
    void ko(plop *a)
      {
        printf("%s\n",a->x);
      }
    
    int main(void)
      {
        plop *test;//test est un pointeur
        test=malloc(sizeof(plop));// on le fait pointer quelque part au cas où
        test->x=malloc(sizeof(char)*20);//pareil avec x
        strcpy(test->x,"hello world!");//copie dans x
        ko(test);//affichage
        free(test->x);
        free(test);
        return 0;
      }
    


    sans quoi ça reviendrait à faire ça :
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    typedef struct{
        char *x;
    }plop;
    
    void ko(plop a)
      {
        printf("%s\n",a.x);
      }
    
    int main(void)
      {
        plop test;
        test.x=malloc(sizeof(char)*20);
        strcpy(test.x,"hello world!");
        ko(test);
        free(test.x);
        return 0;
      }
    
    0
  2. Utilisateur anonyme
     
    oui mais quand je défini disque, je le défini comme un pointeur vers un cd, donc ca revient au même au final non?
    0