2012-01-18 87 views
0

一個新定義的結構我也不過在我使用的節點結構節點的確定指標主要和它的操作操作中稱爲節點目錄中的文件localed/的extern在C

我創建的節點/節點。 h其中有:

typedef struct node node; 

struct node 
{ 
     int my_reg; 
     node *left; 
     node *right; 
} ; 

我創建了NODE/node.c並在其中包含了node.h,它有node_insert node_remove;

但是我使用school_address.c節點結構調查中,我還包括節點/ node.h和節點/ node.c

我試圖把

extern struct node

在school_address。 ç

然而代碼不能編譯和node.h

任何想法重新定義的抱怨?

+2

爲什麼你不顯示實際產生錯誤的代碼? – cnicutar 2012-01-18 18:29:23

回答

2

extern用於變量而不是類型定義。你應該只在所有需要知道的模塊中包含標題struct node;這是代替整個標題的內容,內聯。

你應該怎麼做不是 do是在另一個C文件中包含一個C文件。相反,您應該在標題中聲明常用函數的原型。

例如,

#include "node.h" 

int main() 
{ 
    // whatever 
} 

變,如果你把原型在頭node_insert

typedef struct node node; 

struct node 
{ 
     int my_reg; 
     node *left; 
     node *right; 
}; 

struct node *node_insert(struct node *, int); // or whatever the prototype is 

int main() 
{ 
    // whatever 
} 

的C預處理用它做之後,所以struct nodenode_insertmain可見。

1

您正在查找Include Guard

具體而言,使用

#ifndef node_h_ 
#define node_h_ 1 

在node.h的開始,並在它的端部對應的

#endif 

此外,不包括.c文件。

0

當你的頭文件是由多個C文件包括你,包括他們在預處理指令,以避免雙重定義,如:

#ifndef __NODE_H_INCLUDED__ 
#define __NODE_H_INCLUDED__ 

struct node... 

#endif 

這是很好的做法,在所有的頭文件反正做到這一點。