2017-01-25 138 views
0

這是我的C代碼:爲什麼我的鏈接列表類型無法識別?

#include <stdio.h> 
#include <stdlib.h> 

typedef struct node * ptr; 
typedef struct node { 
    int data; 
    ptr next; 
} item; 

void printList(ptr p); 

int main() { 
    ptr h = NULL; 

} 

void printList(ptr p) { 
    while(p) { 
    printf("%d -> \n", ptr -> data); 
    ptr = ptr -> next; 
    } 
} 

我得到2個錯誤,當我編譯代碼:

error: unexpected type name 'ptr': expected expression 
      printf("%d -> \n", ptr -> data); 
          ^

error: expected identifier or '(' 
      ptr = ptr -> next; 

我試圖玩弄所有樣的變化,但我不明白爲什麼我會得到這些錯誤。

+0

zoma,請修復風格。不要使用這個腦損傷的typedef。 – 0andriy

+3

強烈建議不要在'typedef'中隱藏指針 – yano

+0

我必須使用'typedef'作爲我的課程的一部分。 – Yos

回答

1

我想這是使用過度泛型類型名稱的教訓。

您已將ptr定義爲類型 - 指向項目的指針的類型 - 並且在大多數情況下以這種方式使用它。但是在上述兩行中,您使用ptr就好像它是變量的名稱一樣。代碼中的ptr類型變量名爲p

4

您指的是結構成員的類型而不是結構成員。

printf("%d -> \n", ptr -> data); 
ptr = ptr -> next; 

應該

printf("%d -> \n", p->data); 
p = p->next; 
2

爲什麼我的鏈接列表類型無法識別?

錯誤並不表明您的類型無法識別。事實上,第一個明確指出ptr被識別爲類型名稱。正如它所說的,問題是需要表達式而不是類型名稱作爲->運算符的左操作數。特別是,它看起來像在指定的行上使用變量p而不是類型ptr。例如,

p = p->next; 
相關問題