gpt4 book ai didi

c - header 相互使用结构和枚举?

转载 作者:行者123 更新时间:2023-11-30 14:59:38 26 4
gpt4 key购买 nike

因此,我正在将代码转换为使用头文件的新结构(我应该注意,我不经常使用它们),但我在编译它时遇到了麻烦(使用 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.hMyEnum 的定义之前

这就是调用循环依赖

轻松修复

#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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com