我有两个头文件需要(?)包括彼此。
第一个
头部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/

10-11 01:04