2017-01-25 6 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

zomG、please、1件のスタイルを修正してください。そして、この脳に損傷を与えたtypedefを使わないでください。 – 0andriy

+3

は、 'typedef'sにポインタを隠さないことを強く推奨します – yano

+0

私は' typedef'を私のコースの一部として使用しなければなりません。 – Yos

答えて

1

私は過度に一般的なタイプ名を使用することが教訓だと思います。

あなたはタイプ(アイテムへのポインタのタイプ)としてptrを定義しました。ほとんどの場合、そのように使用します。しかし、問題の2行では、変数名のようにptrを使用します。コード内のptr型の変数の名前はpです。

4

構造体メンバではなく、構造体メンバの型を参照しています。私のリンクリストの種類が認識されない理由を

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

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

すべきですか?

エラーがあなたのタイプが認識されていないことを示すものではありません。確かに、第1は、ptrが型名として認識されることを明示的に示している。この問題は、タイプ名ではなく、の式->演算子の左オペランドとして必要であることを示しています。特に、表示される行にptrと入力するのではなく、変数pを使用するように見えます。たとえば、

p = p->next; 
関連する問題