Se connecter avec
S'enregistrer | Connectez-vous

[langage C] problème de pointeurs

Dernière réponse : dans Programmation

Bonjour,

voilà, comme vous vous en doutez, j'ai besoin d'aide!!! :-?

Je bosse actuellement sur un projet en C dont l'un des aspects est la recherche de composantes fortement connexes dans un graphe orienté. Waaa, plein de jolis mots... mais ce n'est pas l'essentiel. J'en viens au noeud du problème.

En fait, un graphe se compose de sommets et d'arcs les reliant. J'ai dont un typedef {...} sommet et un typedef {...} arc. Or, une structure de données de type sommet contient une liste de pointeurs vers ses arcs aentrants et ses arcs sortants, tandis qu'une structure de type arc contient un pointeur vers son sommet de départ et un autre vers son sommet de destination.

Les deux structures se "pointent" mutuellement, en fait.

Au niveau du code, cela donne un truc du genre :

typedef struct
{
...
arc **entrants;
arc **sortants;
...
} sommet;

typedef struct
{
...
sommet *origine;
sommet *destination;
...
} arc;

Moi, personnellement, ça me parle bien, mais malheureusement on dirait que ce n'est pas le cas pour mon compilo C qui m'envoie bouler!

Si quelqu'un (ou quelqu'une, sait-on jamais :-D ) pouvait donc éclairer ma lanterne...

merci d'avance.

Autres pages sur : langage probleme pointeurs

Lassé par la pub ? Créez un compte
Expert Programmation

Le compilateur lit le source ligne par ligne.
Quand il lit la première structure, il ne connait pas la seconde. La solution est de déclarer les types avant.
Fait un truc du genre:

  1. struct _sommet;
  2. struct _arc;
  3.  
  4. typedef struct _sommet
  5. {
  6. ...
  7. struct _arc **entrants;
  8. struct _arc **sortants;
  9. ...
  10. } sommet;
  11.  
  12. typedef struct _arc
  13. {
  14. ...
  15. struct _sommet *origine;
  16. struct _sommet *destination;
  17. ..
  18. } arc;

En fait en mettant directement struct, je crois que tu n'es pas obligé de les déclarer avant, mais comme je ne suis pas sûr je te mets la version complète ;-)
Lassé par la pub ? Créez un compte
Tom's guide dans le monde