我有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
我不喜欢这种工作方式,但我也不喜欢在不同的标题中声明它们所涉及的相关不属于的结构。
代码只是一个MCTR所以请不要给我改进提示。
我现在收到错误:
header1.h:17:错误:预期声明说明符或'MyStruct_t'之前的'...'
这是由include依赖引起的问题吗?如果是这样,我该如何解决呢?
答案 0 :(得分:1)
您获得的编译器错误只是在.c文件中包含header2.h
的结果。这将大致执行以下步骤
HEADER2_H
header1.h
HEADER1_H
header2.h
,但因为HEADER2_H
已经定义,所以这主要是无操作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
的定义