未知类型名称 - C 中可能存在循环依赖关系



我在编译代码时遇到问题。我猜测它是循环依赖,但无论如何,我的问题是如何阅读 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也是如此。

最新更新