2011-12-01 75 views
0

所以我是C新手,我試圖通過如下鏈接列表實現購物車。「類型名稱需要說明符或限定符」是什麼意思?

typedef struct { 
    char *name; 
    int count; 
    struct node *next; 
} item; 


struct cart { 
    item *curr, *head; 
    head = NULL; 

}; 

當我去,雖然編譯,我得到以下錯誤:

[email protected]:~> 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 

但我不能圖這意味着什麼。

回答

2

struct定義中不允許分配,這是您的問題。

爲了初始化headNULL,你應該聲明struct的實例,並使用相應的初始化器:

struct cart { 
    item *curr, *head; 
} sample_cart = { 
    NULL, NULL, 
}; 

sample_cartheadcurr領域現在都NULL

1

這意味着您所寫的內容(head = NULL;)在您編寫它的上下文中無效(struct的定義)。您只能定義您的struct包含的內容,而不能通過分配對其進行初始化。

您能夠方便地做的最好的是

struct cart my_cart = { NULL, NULL }; 

其中NULL S IN結構定義初始化結構成員中出現的順序創建結構(第一NULL被分配到curr,第二個到head )。

1

您不能指定給headhead不是一個對象:它是一個結構成員的名稱。

可以執行的操作(該結構以外definiton)是分配給類型的對象的部分headstruct cart

struct cart object; 
object.head = NULL; 

,或者在C99,初始化構件具有值

struct cart object = { .head = NULL }; 
相關問題