У меня проблема с использованием списка смежности графической библиотеки Boost. Кажется, это проблема циклической зависимости: у меня есть typedef T шаблона, который использует некоторый класс A. Кроме того, A хранит указатель на объект типа T. Теперь компилятор говорит мне, что T не называет тип.
Вот выдержки из моих более конкретных файлов:
//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. К сожалению, моя идея была cra*, и я должен найти другое решение. Типы Edge_descriptor, кажется, существуют по какой-то причине...