gpt4 book ai didi

cyclic Include dependency 引起麻烦,如何解决?

转载 作者:太空宇宙 更新时间:2023-11-04 03:49:43 26 4
gpt4 key购买 nike

我有 2 个头文件需要(?)相互包含。

第一个

header1.h

看起来像这样:

#ifndef HEADER1_H
#define HEADER1_H

#include "header2.h"

typedef Needed_s
{
size_t something;
} Needed_t;

typedef partialstruct_s
{
size_t something;
Needed_t *pointer;
} partialstruct_t;

void function (MyStruct_t Parameter);//<- this line gets the error

#endif

第二个

header2.h

像这样:

#ifndef HEADER2_H
#define HEADER2_H

#include "header1.h"

typedef MyStruct_s
{
//struct partialstruct_s ThisOne;
//I tryed both ways!
partialstruct_t ThisOne;
} MyStruct_t;

#endif

我不喜欢这种工作方式,但我也不喜欢在不同的 header 中声明结构,因为它们认为相关的不属于。

代码只是一个 MCTR,所以请不要给我改进提示。

我现在得到错误:

header1.h:17: error: expected declaration specifiers or '...' before 'MyStruct_t '

那么这个问题是不是include依赖导致的呢?如果是这样,我该如何解决?

最佳答案

您遇到的编译器错误只是将 header2.h 包含在 .c 文件中的结果。那将大致经过以下几个步骤

  1. 定义HEADER2_H
  2. 包含header1.h
  3. 定义HEADER1_H
  4. 包含 header2.h 但因为 HEADER2_H 已经定义,这在很大程度上是一个空操作
  5. 现在回到 header1.h 编译器遇到 void function (MyStruct_t Parameter);

此时 MyStruct_t 未定义,因为 header2.h 尚未处理,因此您会收到指定的编译器错误。

不幸的是,由于循环依赖,真的没有办法用定义的头文件中的代码来解决这个问题。

  • header1.h 依赖于 header2.h
  • MyStruct_t 的完整实现
  • header2.h 依赖于 partialstruct_t 的完整实现,即 header1.h

为了解决这个问题,您需要将其中一个头文件切换为使用指针,或者创建第三个头文件 header0.h,其中包含 partialstruct_t< 的定义

关于cyclic Include dependency 引起麻烦,如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21714044/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com