gcc 4.4.4 c89
不确定我为什么会收到此错误。
在我的标题文件中,我有以下
handle.h
typedef struct Handle_t Handle
在我的实施档案
中handle.c
struct Handle {
size_t id;
char *name;
};
Handle* create_handle(size_t id)
{
Handle *hdev = NULL;
hdev = malloc(sizeof(*hdev)); /* Error */
.
.
}
非常感谢任何建议,
答案 0 :(得分:6)
我常常经常误解typedef
,直到我开始认为它有两个部分:类型和 def 。首先是类型,然后是 def 新名称。
typedef <type> <name>;
typedef struct Handle Handle_t; /* defines Handle_t as struct Handle */
typedef char *c_string; /* defines c_string as char * */
答案 1 :(得分:2)
您的struct的名称需要与typedef匹配:
struct Handle_t {
/* ... */
};
答案 2 :(得分:1)
typedef struct Handle_t Handle
您定义的结构称为Handle
,而不是Handle_t
,这就是您要进行的类型编排。
答案 3 :(得分:1)
typedef struct Handle_t Handle
键入已定义的结构Handle_t to Handle,但结构为Struct Handle,因此要么将struct Hadle更改为Struct handle_t,要么键入def。
答案 4 :(得分:1)
struct Handle_t
未在编译器到达带错误的行时定义。
您已定义struct Handle
并将类型Handle
别名为不存在的类型struct Handle_t
。可以在C
中为很多东西提供不存在的类型,但不能用于sizeof
参数。