我主要在其中使用节点结构但定义节点并且它的操作操作被定位在名为NODE /
的目录中的文件中我创建了NODE / node.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中使用节点struction,其中我还包括NODE / node.h和NODE / node.c
我尝试了
extern struct node
在school_address.c
然而代码没有编译并抱怨node.h中的重新定义
有什么想法吗?
答案 0 :(得分:2)
extern
用于变量,而不是类型定义。您应该只在所有需要了解struct node
的模块中包含标题;它取代了整个标题的内容,内联。
不做的是在另一个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 node
和node_insert
在main
中可见。
答案 1 :(得分:1)
您正在寻找Include Guard。
具体来说,使用
#ifndef node_h_
#define node_h_ 1
在node.h的开头,和相应的
#endif
最后。
另外,请勿包含.c
个文件。
答案 2 :(得分:0)
当您的头文件包含在多个C文件中时,您必须将它们包含在预处理程序指令中以避免双重定义,例如:
#ifndef __NODE_H_INCLUDED__
#define __NODE_H_INCLUDED__
struct node...
#endif
最好在所有头文件中执行此操作。