我有两个头文件需要(?)包括彼此。
第一个
头部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 function (MyStruct_t Parameter);//<- this line gets the error
#endif
第二个
头部2.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
我不喜欢这种工作方式,但我也不喜欢在不同的标题中声明它们认为相关的不属于的结构。
代码只是一个MCTR,所以请不要给我改进的提示。
我现在知道了错误:
header1.h:17:错误:“MyStruct”之前需要声明说明符或“…”
那么这个问题是由include依赖引起的吗?如果是的话,我怎么解决呢?
最佳答案
您得到的编译器错误只是在.c文件中包含header2.h
的结果。大致经过以下步骤
定义HEADER2_H
包括header1.h
定义HEADER1_H
包括header2.h
但由于已经定义了HEADER2_H
,这在很大程度上是一个no操作
现在回到header1.h
编译器遇到void function (MyStruct_t Parameter);
此时未定义MyStruct_t
,因为尚未处理header2.h
,因此会出现指定的编译器错误。
不幸的是,由于循环依赖性,无法用头文件中定义的代码解决这个问题。header1.h
取决于MyStruct_t
中的header2.h
的完整实现header2.h
取决于partialstruct_t
的完整实现,即header1.h
为了解决这个问题,您需要将其中一个头文件切换为使用指针,或者创建第三个头文件header0.
h,其中包含partialstruct_t
关于c - 周期性的include依赖引起麻烦,如何解决?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21714044/