两个.h文件互相调用,导致编译失败
在stack_tree.h中,我需要使用TreeNode*,但它是在tree.h中定义的,所以我尝试包含“tree.h”,就像下面的代码:
stack_tree.h:
#include "tree.h"
#define variable_type TreeNode*
#define MaxSize 50
typedef struct stack
{
variable_type data[MaxSize];
int top;
}SqStack; //栈的顺序存储
但是在tree.h中,我需要使用SqStack,所以我必须包含“stack_tree.h”,这会导致两个h文件相互包含,然后编译为false
tree.h:
typedef struct tree
{
int val;
struct tree *lnext;
struct tree *rnext;
SqStack* next;
}TreeNode;
我该如何解决这个问题?
你需要包括警卫。请参阅https://en.wikipedia.org/wiki/Include_guard
stack_tree.h:
#ifndef STACKTREE_H
#define STACKTREE_H
#include "tree.h"
#define variable_type TreeNode*
#define MaxSize 50
typedef struct stack
{
variable_type data[MaxSize];
int top;
}SqStack;
#endif
树.h:
#ifndef TREE_H
#define TREE_H
typedef struct tree
{
int val;
struct tree *lnext;
struct tree *rnext;
SqStack* next;
}TreeNode;
# endif
您不能创建两个互相调用的头文件,但您可以对函数(内联函数除外)和变量 vb 使用“extern”关键字。
或者在这个问题中,你必须在tree.h中再次编写struct。