0
因此,我將我的代碼轉換爲使用頭文件的新結構(我應該注意,我不經常使用它們),並且無法編譯它(使用gcc --std = c11)。我想我知道問題是什麼,我只是不知道如何執行代碼來修復它。在彼此中使用struct和枚舉的頭文件?
下面是一些描述問題的代碼。
的main.c
#include "file1.h"
#include "file2.h"
#include "header.h"
int main()
{
BigStruct bigStruct;
DoStuff(&bigStruct);
OtherStuff(&bigStruct);
return 0;
}
file1.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
file2.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
header.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];
現在我想我理解錯誤,我只是不知道如何實施解決方案。
不太容易,但更正確的解決方法是擺脫3個文件之間的這種可怕的依賴關係。要麼將它們聯合起來,要麼將它們分開。 – StoryTeller
謝謝。我從file1.h和file2.h中刪除了#include「header.h」,這也解決了這個問題。這是更好的解決方案還是更優雅? –
@StoryTeller是的,當然。我正在寫這篇文章。 – LPs