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.