Also konvertiere ich meinen Code in eine neue Struktur, die Header-Dateien verwendet (ich sollte beachten, dass ich sie nicht oft verwende) und ich habe Probleme, es zu kompilieren (mit gcc --std = c11). Ich denke, ich weiß, was das Problem ist, ich weiß einfach nicht, wie man den Code implementiert, um es zu beheben.Header mit struct und enums ineinander?
Hier ist ein Code, der das Problem beschreibt.
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
Der Compiler sagt mir das.
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];
Jetzt denke ich, ich verstehe den Fehler, ich weiß nur nicht, wie man eine Lösung implementieren.
Eine weniger einfache, aber korrektere Lösung wäre es, diese schreckliche Abhängigkeit zwischen den 3 Dateien loszuwerden. Entweder vereinigen Sie sie oder trennen Sie sie richtig. – StoryTeller
Danke. Ich entfernte #include "header.h" aus file1.h und file2.h, und das behob das Problem auch. Ist das eine bessere Lösung oder eleganter? –
@StoryTeller Ja, sicher. Ich schrieb das in der Zwischenzeit. – LPs