作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
因此,我正在将代码转换为使用头文件的新结构(我应该注意,我不经常使用它们),但我在编译它时遇到了麻烦(使用 gcc --std=c11) 。我想我知道问题是什么,只是不知道如何实现代码来修复它。
这里有一些描述问题的代码。
main.c
#include "file1.h"
#include "file2.h"
#include "header.h"
int main( )
{
BigStruct bigStruct;
DoStuff( &bigStruct );
OtherStuff( &bigStruct );
return 0;
}
文件1.h
#ifndef FILE1_H
#define FILE1_H
#include "header.h"
typedef enum TagMyEnum
{
MY_THING1,
MY_THING2,
MY_ENUM_END
}
MyEnum;
typedef struct TagMyStruct
{
// Variables.
}
MyStruct;
typedef struct TagBigStruct BigStruct;
void DoStuff( BigStruct *bigStruct );
#endif
文件2.h
#ifndef FILE2_H
#define FILE2_H
#include "header.h"
typedef enum TagOtherEnum
{
OTHER_THING1,
OTHER_THING2,
OTHER_ENUM_END
}
OtherEnum;
typedef struct TagOtherStruct
{
// Variables.
}
OtherStruct;
typedef struct TagBigStruct BigStruct;
void OtherStuff( BigStruct *bigStruct );
#endif
标题.h
#ifndef HEADER_H
#define HEADER_H
#include "file1.h"
#include "file2.h"
typedef struct TagMyStruct MyStruct;
typedef struct TagOtherStruct OtherStruct;
typedef struct TagBigStruct
{
MyStruct myStruct[MY_ENUM_END];
OtherStruct otherStruct[OTHER_ENUM_END];
}
BigStruct;
#endif
编译器告诉我这一点。
In file included from file1.h:4:0,
from main.c:2:
header.h:12:23: error: ‘MY_ENUM_END’ undeclared here (not in a function)
MyStruct myStruct[MY_ENUM_END];
现在我想我理解了这个错误,我只是不知道如何实现解决方案。
最佳答案
Header.h
需要 MY_ENUM_END
,但它包含在 file1.h
中 MyEnum
的定义之前
这就是调用循环依赖
轻松修复
#ifndef FILE1_H
#define FILE1_H
typedef enum TagMyEnum
{
MY_THING1,
MY_THING2,
MY_ENUM_END
}
MyEnum;
#include "header.h"
// ...
file2.h 也是如此。
最好重新设计 header 以避免它们之间的交叉引用。
关于c - header 相互使用结构和枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42628931/
我是一名优秀的程序员,十分优秀!