C dépendance circulaire

J'ai ce problème avec dépendance circulaire dans C, je regarda autour de lui d'autres questions sur ce sujet, mais ne pouvais vraiment pas trouver la réponse.

J'ai cette première struct nommé 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

La deuxième structure est la edgelist qui est inclus par le sommet.

#ifndef edgelist_h
#define edgelist_h

#include "edge.h" //include edge, because its needed

typedef struct _edgelist
{
    edge** edges; 
    int capacity, size;
} edgelist;

//...

#endif

Et puis, le dernier struct, celle où le problème soulève, le bord struct est inclus par le edgelist ci-dessus.

#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

J'ai essayé tout ce que je pouvais, avant de déclarer, à l'aide de #ifndef, #define etc. mais je ne pouvais pas trouver la réponse.

Comment puis-je résoudre cette circulaire problème de dépendance?

  • En C11, vous pouvez répéter les typedefs sans danger. Vous pouvez écrire typedef struct edge edge;typedef struct vertex vertex;typedef struct edgelist edgelist; dans toutes les têtes, et puis il suffit de définir le type de structure de l'information (sans le typedef préfixe ou le nom à la fin) dans l'en-tête: struct vertex { … };struct edge { … };struct edgelist { … };. Cela ne fonctionne pas dans C99 ou C90, cependant; la définition d'un typedef pour le même nom est une erreur dans les versions antérieures de C.
InformationsquelleAutor Marnix v. R. | 2012-04-12