访问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;
当我从包含Element
( User
)的列表中找回一个节点时,我无法访问它的成员,我做错了什么? 谢谢!
问题是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
中包含*
通常会令人困惑。