2016-12-06 142 views
5

我知道必须在使用它们之前对其进行定义,但是我收到了“未知类型名称错误”。未知类型名称C

这是我Node定义:

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

这是我的声明(上线96):

Node* hashtable[HashArraySize]; 

我收到此错误信息:

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

写'typedef结构节点节点;' – BLUEPIXY

+2

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

回答

9

不像C++这将struct标签视为新类型名称,如果您无线连接,C需要显式typedef SH使用Nodestruct

typedef struct Node Node; 

或者,你可以在你的声明中使用struct Node

struct Node* hashtable[HashArraySize]; 
+0

哪个更干净/你认为更好? –

+2

@ A.Allen如果有多个采用'struct Node'的函数,那么'typedef'更清晰。如果只有一个或两个需要使用'Node'的地方,'struct Node'稍微干净些。重要的是决定一种方法,并为所有结构一致地执行。 – dasblinkenlight

+0

@ A.Allen我个人很鄙视'typedef's。我想知道我在做什么。当我不得不通过嵌套的'.h'文件搜索回来发现什么是什么(在IDE中不坏,在Vi中很糟糕(grep帮助))时,蒸汽从我耳中流出。而且我个人最喜欢的是,当来自不同地方的2个'.h'文件'typedef'ed两种不同的类型到同一个名字。国际海事组织,只有时间才能使用'typedefs',如果你有一个类型名称非常“长”,或者你的代码将运行在几个不同的平台上,每个平台的基本类型可能不同。有经验的兽医请告诉我为什么我错了 – yano

6

变化Node* hashtable[HashArraySize];struct Node* hashtable[HashArraySize];

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