У меня возникла проблема с использованием списка смежности библиотеки графики Boost. Кажется, это проблема с круговой зависимостью: У меня есть typedef T шаблона, который использует некоторый класс A. Дополнительно A хранит указатель на объект типа T. Теперь компилятор говорит мне, что T не называет тип.Как решить Boost :: шаблон BGL <-> класс круговой зависимости?
Вот excerptions моих более конкретных файлов:
//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 {
...
};
Как я могу решить эту проблему зависимость/включение порядка?
ДРУГОЙ РЕДАКТИРОВАНИЕ: Я просто подумал, что тип edge_descriptor может быть примитивным, как int. Это решило бы проблему, потому что я смог бы заменить edge_descriptors Lane на простые int-переменные и, таким образом, мог бы удалить включение graphdefinitions.hpp внутри tie.hpp. К сожалению, моя идея была сумасшедшей, и мне нужно найти другое решение. Типы Edge_descriptor, по-видимому, существуют по этой причине ...
Ровно! Но возникает вопрос: что такое (рабочая!) Альтернатива этому подходу? Я также попытался просто отправить объявление Tie and Lane внутри файла graphdefinitions.hpp, которое также не было принято компилятором. – Bastian
@Bastian: Используйте PIMPL для реализации Lane. – Puppy
@DeadMG: Пожалуйста, взгляните на мое последнее сообщение. – Bastian