2016-12-06 11 views
5

Ich weiß, dass Dinge definiert werden müssen, bevor sie verwendet werden, aber ich bekomme einen "unbekannten Typ Name Fehler."Unbekannter Typ Name C

Dies ist meine Node Definition:

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

Diese meine Erklärung ist (auf Leitung 96):

Node* hashtable[HashArraySize]; 

Ich bekomme diese Fehlermeldung:

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

Schreib 'typedef struct Knoten Knoten; ' – BLUEPIXY

+2

oder 'struct Node * hashtable [HashArraySize];' – yano

Antwort

9

Im Gegensatz zu C++ die behandelt struct Tags als neue Typnamen, erfordert C eine explizite Typdef, wenn Sie wi sh Node ohne struct zu verwenden:

typedef struct Node Node; 

Alternativ Sie struct Node in Ihrer Erklärung verwenden:

struct Node* hashtable[HashArraySize]; 
+0

was ist Ihrer Meinung nach sauberer/besser? –

+2

@ A.Allen Wenn es mehrere Funktionen gibt, die 'struct Node' übernehmen, ist' typedef' sauberer. Wenn nur ein oder zwei Stellen benötigt werden, an denen 'Node' verwendet werden soll, ist 'struct Node' etwas sauberer. Es ist wichtig, sich für einen Ansatz zu entscheiden und dies konsequent für alle Ihre Strukturen zu tun. – dasblinkenlight

+0

@ A.Allen Persönlich verachte ich 'typedef's. Ich möchte wissen, womit ich arbeite. Dampf kommt aus meinen Ohren, wenn ich durch verschachtelte '.h' Dateien suchen muss, um herauszufinden, was etwas ist (nicht schlecht in einer IDE, schrecklich in Vi (grep hilft)). Und mein persönlicher Favorit, wenn 2 '.h' Dateien von verschiedenen Orten' typedef'ed zwei verschiedene Typen auf den gleichen Namen haben. IMO, ist nur Zeit, 'typedefs' zu verwenden, wenn Sie einen Typnamen haben, der wirklich" lang "ist, oder wenn Ihr Code auf mehreren verschiedenen Plattformen läuft, wo die primitiven Typen für jeden unterschiedlich sein können. Erfahrene Tierärzte sagen mir bitte, warum ich falsch liege – yano

6

ändern Node* hashtable[HashArraySize];-struct Node* hashtable[HashArraySize];

oder

typedef struct Node { 
    position* p; 
    struct Node* next; 
    struct Node* prev; 
} Node; 
Verwandte Themen