所以我是C的新手,我正试图通过链接列表实现购物车,如下所示。
typedef struct {
char *name;
int count;
struct node *next;
} item;
struct cart {
item *curr, *head;
head = NULL;
};
当我去编译时,我收到以下错误:
ceasarb@ampersand:~> clang shopper.c
shopper.c:14:3: error: type name requires a specifier or qualifier
head = NULL;
^
shopper.c:14:3: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
head = NULL;
^~~~
shopper.c:14:3: error: duplicate member 'head'
shopper.c:13:16: note: previous declaration is here
item *curr, *head;
^
shopper.c:14:7: error: expected ';' at end of declaration list
head = NULL;
^
;
我猜测问题的根源是
type name requires a specifier or qualifier
但我无法弄清楚这意味着什么。
答案 0 :(得分:4)
struct
定义中不允许分配,这是您的问题。
要将head
初始化为NULL
,您应该声明该struct
的实例并使用相应的初始值:
struct cart {
item *curr, *head;
} sample_cart = {
NULL, NULL,
};
head
的{{1}}和curr
字段现在都是sample_cart
。
答案 1 :(得分:1)
这意味着您编写的内容(head = NULL;
)在您编写它的上下文中无效(struct
的定义)。您只能定义struct
包含的内容,而不能通过分配对其进行初始化。
你能做的最好的就是用
创建你的结构struct cart my_cart = { NULL, NULL };
其中NULL
按结构定义中的出现顺序初始化struct成员(第一个NULL
被分配给curr
,第二个被分配给head
)。< / p>
答案 2 :(得分:1)
您无法分配到head
。 head
不是对象:它是结构成员的名称。
您可以做什么(在结构定义之外)分配给head
struct cart
部分
struct cart object;
object.head = NULL;
或者,在C99中,使用值
初始化该成员struct cart object = { .head = NULL };