Ich habe dieses Problem mit der zirkulären Abhängigkeit in C, ich sah mich um die anderen Fragen zu diesem Thema, aber wirklich konnte die Antwort nicht finden.C zirkuläre Abhängigkeit
Ich habe diese erste Struktur namens Vertex:
#ifndef MapTest_vertex_h
#define MapTest_vertex_h
#include "edgelist.h" //includes edgelist because it's needed
typedef struct
{
char* name;
float x, y;
edgelist* edges;
} vertex;
#endif
Die zweite Struktur der Kantenliste ist, die durch den Scheitelpunkt enthalten ist.
#ifndef edgelist_h
#define edgelist_h
#include "edge.h" //include edge, because its needed
typedef struct _edgelist
{
edge** edges;
int capacity, size;
} edgelist;
//...
#endif
Und dann die letzte Struktur, die, wo das Problem löst, wird die Kante struct oben durch die Kantenliste enthalten.
#ifndef MapTest_edge_h
#define MapTest_edge_h
#include "vertex.h" //needs to be included because it will be unkown otherwise
typedef struct
{
float weight;
vertex* destination;
int found;
} edge;
#endif
Ich habe alles versucht ich konnte, nach vorn zu erklären, #ifndef
, #define
usw. verwenden, aber die Antwort nicht finden konnte.
Wie kann ich dieses zirkuläre Abhängigkeitsproblem lösen?
In C11, können Sie typedefs überbrückte wiederholen. Sie könnten 'typedef struct edge edge;' - 'typedef struct Vertex Vertex;' - 'typedef struct Edgelisten Edgeliste;' in einen oder alle Header schreiben und dann einfach die Strukturtyp Information definieren (ohne das 'typedef' Präfix oder die Name am Ende) in der entsprechenden Kopfzeile: 'struct vertex {...};' - 'struct edge {...};' - 'struct Editierliste {...};'. Dies funktioniert jedoch nicht in C99 oder C90. Das Definieren von 'typedef' für denselben Namen ist ein Fehler in früheren Versionen von C. –