vscode中两个h文件需要互相调用的问题如何解决

问题描述 投票:0回答:2

两个.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;

我该如何解决这个问题?

c struct
2个回答
0
投票

你需要包括警卫。请参阅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

0
投票

您不能创建两个互相调用的头文件,但您可以对函数(内联函数除外)和变量 vb 使用“extern”关键字。

或者在这个问题中,你必须在tree.h中再次编写struct。

© www.soinside.com 2019 - 2024. All rights reserved.