2012-01-18 83 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 

这是很好的做法,在所有的头文件反正做到这一点。