C 循环包含依赖导致的麻烦,如何解决?
我有两个头文件需要(?)包含彼此 第一个 校长1.h 看起来像这样:C 循环包含依赖导致的麻烦,如何解决?,c,include,C,Include,我有两个头文件需要(?)包含彼此 第一个 校长1.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 fun
#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
#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
我不喜欢这种工作方式,但我也不喜欢在不同的头中声明它们不属于的结构
代码只是一个MCTR,所以请不要给我改进的提示
我现在得到错误:
header1.h:17:错误:“MyStruct\t”之前应该有声明说明符或“…”
那么这个问题是由include依赖性引起的吗?如果是这样,我该如何解决它呢?您得到的编译器错误只是在.c文件中包含
header2.h
的结果。这将大致经历以下步骤
HEADER2\u H
header1.h
HEADER1\u H
header2.h
,但由于已经定义了header2\u h
,因此这在很大程度上是不可操作的header1.h
编译器遇到void函数(MyStruct\t参数)代码>
MyStruct\t
,因为尚未处理header2.h
,因此会出现指定的编译器错误
不幸的是,由于循环依赖性,实际上没有办法用定义的头文件中的代码来解决这个问题
取决于header1.h
header2.h
取决于header2.h
的全面实施,即partialstruct
header1.h
为了解决此问题,您需要切换其中一个头文件以使用指针,或者创建第三个头文件,
header0。
h包含partialstruct\t
的定义,将partialstruct\t排除到另一个头文件中并没有为我解决此问题:/@Zaibis您是否更新了包含顺序以反映新的细分?@Zaibis两个header2都应该包括header0,header1应该包括header0和header2。header0需要一个嵌套的转发声明,虽然我现在把所有的typedef都放到header1中,并在header2中做了一个注释typedef,并注明在哪里可以找到它们,而且以不同的方式是不可能的。无论如何,感谢您的帮助。如果两个标题/库/模块/任何东西相互依赖,那么从一开始就将它们分开可能是一个错误。但有时它们的使用意图在主题上完全不同。从干净代码的角度来看,也看这个主题并不是一个错误。