我在编译代码时遇到问题。我猜测它是循环依赖,但无论如何,我的问题是如何阅读 gcc 告诉我的输出。我得到这样的东西:
In file included from src/./../lib_ex/./../lib_ex/./../lib_ex/./../lib_ex/trav_item.h:7:0,
from src_core/./../lib_ex/./../lib_ex/./../lib_ex/path.h:11,
然后列出的错误之一是这样的:从
src_core/main.c:8: src_core/./../lib_ex/./../lib_ex/./../lib_ex/./../lib_ex/./../lib_ex/bubble.h:22:2: error: unknown type name ‘Path’
所以我想知道如何现在在哪里检查问题,如上所示,它列出了标题 path.h 和 trav_item.h,但下面提到了另一个气泡。
所以在我的标题 path.h 中,我有以下条目(只是缩短了以查看我是否确实有 ciruclar 依赖项:
#include "./../lib_ex/trav_item.h"
struct Traversal_item;
typedef struct Path {
int ID;
char* ex;
Traversal_item* ti;
} Path;
在trav_item.h.我有这个:
#include "./../lib_ex/bubble.h"
#include "./../lib_ex/path.h"
struct Path;
typedef struct Traversal_item {
// some variables
Path* path;
} Traversal_item;
所以我认为我必须预定义结构路径才能在这里使用它,但显然我仍然做错了什么:/。
哦,在 bubble.h 中,我还包含 path.header:
#include "./../lib_ex/path.h"
typedef struct {
Path* path;
} BBL;
当你这样做时
struct Path;
您只是对名为 Path
的结构进行前向声明,而不是类型别名Path
。因此,使用类型别名将导致您遇到的错误(因为没有名为 Path
的类型(。
有两种解决方案:要么对类型别名进行前向声明
typedef struct Path Path;
或在Traversal_item
结构中使用
struct Path *path;
path.h
头文件中的Traversal_item
也是如此。