C circular dependency

c, c-preprocessor, circular-dependency, include

Solution

Seems like you shouldn't need to include anything in any of the files. A forward declaration of the relevant types should be sufficient:

#ifndef MapTest_vertex_h
#define MapTest_vertex_h

struct edgelist;

typedef struct
{
    char* name;
    float x, y;
    edgelist* edges;    // C++ only - not C
} vertex;

#endif

etc. In C coding, you have to write:

struct edgelist;

typedef struct
{
    char* name;
    float x, y;
    struct edgelist* edges;
} vertex;

Problem

I have this problem with circular dependency in C, I looked around the other questions about this topic but really couldn't find the answer. I have this first struct named 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 ``` The second struct is the edgelist which is included by the vertex. ``` #ifndef edgelist_h #define edgelist_h #include "edge.h" //include edge, because its needed typedef struct _edgelist { edge** edges; int capacity, size; } edgelist; //... #endif ``` And then the last struct, the one where the problem raises, the edge struct gets included by the edgelist above. ``` #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 ``` I tried everything I could, forward declaring, using `#ifndef`, `#define` etc. but couldn't find the answer. How can I resolve this circular dependency problem?

Original source