我有這個循環依賴的問題C,我環顧了這個主題的其他問題,但實際上找不到答案。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
第二結構是通過該頂點包含在EdgeList都。
#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
等,但未能找到答案。
我該如何解決這個循環依賴問題?
在C11,你可以重複無害的typedef。你可以在任何或所有頭文件中編寫'typedef struct edge edge;''''typedef struct vertex vertex;' - 'typedef struct edgelist edgelist;'然後只需定義結構類型信息(不帶'typedef'前綴或名稱在結尾處):'struct vertex {...};' - 'struct edge {...};' - 'struct edgelist {...};'。但是這不適用於C99或C90;在早期版本的C中定義一個'typedef'是錯誤的。 – 2017-03-07 22:05:52