2016-12-06 9 views
5

使用前に定義しなければならないことが分かっていますが、「不明なタイプ名エラー」が発生しています。不明なタイプ名C

これは私のNode定義です:

struct Node { 
    position* p; 
    struct Node* next; 
    struct Node* prev; 
}; 

これは、(ライン96上の)私の宣言です:

Node* hashtable[HashArraySize]; 

私は、このエラーメッセージが出ます:Cとは異なり

P1.c:96:1: error: unknown type name ‘Node’ 
Node* hashtable[HashArraySize]; 
+3

書き込み 'typedefは構造体ノードノード; – BLUEPIXY

+2

または 'struct Node * hashtable [HashArraySize];' – yano

答えて

9

を++新しい型名としてstructタグを扱います。Cは明示的なtypedefを必要とします。 shがstructなしNodeを使用するには:または

typedef struct Node Node; 

、あなたの宣言でstruct Nodeを使用することができます。

struct Node* hashtable[HashArraySize]; 
+0

あなたの意見ではよりクリーンで良いでしょうか? –

+2

@Allen 'struct Node'をとる関数が複数ある場合、' typedef'はより洗練されています。 'Node'を使う必要がある場所が1つか2つしかない場合、' struct Node'は少しきれいです。重要なことは、一つのアプローチを決めることと、すべての 'struct'のために一貫して行うことです。 – dasblinkenlight

+0

@A.Allen個人的に私は 'typedef'を軽視します。私は私が働いていることを知りたい。 Steamは、ネストされた '.h'ファイルを検索して何かが見つかったときに耳から出てきます(IDEでは悪くない、Viで恐ろしい(grepが助けます))。そして私の個人的な好みは、異なる場所からの2つの '.h'ファイルが同じ名前に2つの異なる型を' typedef'したときです。 IMOでは 'typedefs 'を使う時間は本当に"長い "型名か、それぞれのプリミティブ型が異なるいくつかの異なるプラットフォーム上でコードが実行されるかどうかだけです。経験豊富な獣医は私になぜ間違っているのか教えてください – yano

6

変更Node* hashtable[HashArraySize];からstruct Node* hashtable[HashArraySize];

または

typedef struct Node { 
    position* p; 
    struct Node* next; 
    struct Node* prev; 
} Node; 
関連する問題