accédant à la structure: pointeur de derefrencing au type incomplet

Lorsque j’essaie d’utiliser et d’accéder aux pointeurs de mes structures, je continue à recevoir le message agaçant de "dereferencing pointer to incomplete type" ….

Par exemple, dans mon fichier user.h , j’ai ce typedef :

 typedef struct FacebookUser_t* User; 

et dans mon fichier user.c qui comprend user.h j’ai cette structure:

 struct FacebookUser_t {...}; 

Ainsi, lorsque j’ai besoin d’un pointeur sur cette structure, je n’utilise que User blabla; cela semble fonctionner, et je l’ajoute à la liste générique en tant Element qui est void* et c’est sa typedef dans list.h :

 typedef void* Element; 

et quand je récupère un nœud de la liste qui contient Element ( User ), je ne peux pas accéder à ses membres, qu’est-ce que je fais mal? Merci!

Le problème est que le fichier C n’a pas access à l’implémentation de cette structure.

Essayez de déplacer la définition de la structure dans le fichier d’en-tête.

Si vous souhaitez masquer la définition d’une structure (en collant la struct { réelle struct { bloc dans un seul fichier C et en typedef qu’un nom typedef dans l’en-tête, vous ne pouvez pas espérer accéder directement aux champs.

Une solution consiste à continuer avec l’encapsulation et à définir les fonctions d’ user.h , c’est-à-dire que vous auriez (dans user.h ):

 const char * user_get_name(const User user); void user_set_name(User user, const char *new_name); ... 

S’il vous plaît noter que l’inclusion de * dans le typedef est souvent déroutant, à mon avis.