“类型名称需要说明符或限定符”是什么意思?

时间:2011-12-01 12:20:04

标签: c

所以我是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

但我无法弄清楚这意味着什么。

3 个答案:

答案 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)

您无法分配到headhead不是对象:它是结构成员的名称。

您可以做什么(在结构定义之外)分配给head

类型对象的struct cart部分
struct cart object;
object.head = NULL;

或者,在C99中,使用值

初始化该成员
struct cart object = { .head = NULL };