访问struct:derefrencing指向不完整类型的指针

当我尝试使用并访问指向我的结构的指针时,我不断收到"dereferencing pointer to incomplete type"的恼人信息….

例如在我的user.h文件中,我有这个typedef

 typedef struct FacebookUser_t* User; 

在我的user.c文件中包含user.h我有这个结构:

 struct FacebookUser_t {...}; 

所以,当我需要一个指向该结构的指针时,我只使用User blabla; 它似乎工作,我将它添加到通用列表作为Element ,它是void* ,这是list.h的typedef:

 typedef void* Element; 

当我从包含ElementUser )的列表中找回一个节点时,我无法访问它的成员,我做错了什么? 谢谢!

问题是C文件无法访问该结构的实现。

尝试在头文件中移动结构的定义。

如果要隐藏结构的定义(通过将实际的struct {块粘贴在单个C文件中并且仅在标题中公开typedef ed名称,则不能指望直接访问这些字段)。

解决这个问题的一种方法是继续封装,并定义访问器函数,即你有(在user.h ):

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

请注意,在我看来,在typedef中包含*通常会令人困惑。