J'ai un problème avec l'utilisation de la liste d'adjacence de la bibliothèque graphique Boost. Il semble être un problème de dépendance circulaire: J'ai un typedef T d'un modèle qui utilise une certaine classe A. De plus, A stocke un pointeur sur un objet de type T. Maintenant, le compilateur me dit que T ne nomme pas un type.Comment résoudre Boost :: BGL modèle <-> classe dépendance circulaire?
Voici excerptions de mes fichiers plus concrets:
//graphdefinitions.hpp
#include "lane.hpp"
#include "tie.hpp"
typedef boost::adjacency_list<boost::listS, boost::listS,
boost::directedS, Tie, Lane> Map;
typedef boost::graph_traits<Map>::edge_descriptor edge_descriptor;
//lane.hpp
#include "graphdefinitions.hpp"
class Lane {
...
edge_descriptor *left, *right;
};
//tie.hpp
//no important includes here
class Tie {
...
};
Comment puis-je résoudre ce problème d'ordre inclusion dépendance /?
UN AUTRE ÉDITION: J'ai juste eu l'idée que le type d'un edge_descriptor pourrait être un primitif comme int. Cela aurait résolu le problème car j'aurais pu remplacer les descripteurs edge_descriptors de Lane par des variables int, ce qui aurait pu supprimer l'inclusion de graphdefinitions.hpp dans tie.hpp. Malheureusement, mon idée était cra * et je dois trouver une autre solution. Les types Edge_descriptor semblent être là pour une raison ...
Exactement! Mais la question est: Qu'est-ce qu'une alternative (de travail!) À cette approche? J'ai aussi déjà essayé de transférer simplement Tie et Lane à l'intérieur de graphdefinitions.hpp qui n'était pas non plus accepté par le compilateur. – Bastian
@Bastian: Utilisez PIMPL pour implémenter Lane. – Puppy
@DeadMG: S'il vous plaît jeter un oeil à mon dernier message. – Bastian