У меня есть эта проблема с круговой зависимостью в C, я просмотрел другие вопросы по этой теме, но действительно не смог найти ответ.
У меня есть эта первая структура с именем вершина:
#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
Вторая структура — это список ребер, который включается вершиной.
#ifndef edgelist_h
#define edgelist_h
#include "edge.h" //include edge, because its needed
typedef struct _edgelist
{
edge** edges;
int capacity, size;
} edgelist;
//...
#endif
И затем последняя структура, та, где возникает проблема, структура края включается в список краев выше.
#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
Я пробовал все, что мог, форвардное объявление, использование #ifndef
, #define
и т. д., но не смог найти ответ.
Как я могу решить эту проблему циклической зависимости?
typedef struct edge edge;
—typedef struct vertex vertex;
—typedef struct edgelist edgelist;
в любом или во всех заголовках, а затем просто определить информацию о типе структуры (без префиксаtypedef
или имени в конце) в соответствующем заголовке:struct vertex { … };
—struct edge { … };
—struct edgelist { … };
. Однако это не будет работать в C99 или C90; определениеtypedef
для того же имени является ошибкой в более ранних версиях C. - person Jonathan Leffler   schedule 08.03.2017