Boost Graphics Library の adjacency-list の使用に問題があります。循環依存の問題のようです: クラス A を使用するテンプレートの typedef T があります。さらに、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 のようなプリミティブ型である可能性があるという考えがありました。Lane の edge_descriptors を単純な int 変数に置き換えることができ、tie.hpp 内の graphdefinitions.hpp のインクルードを削除できたので、これで問題は解決したはずです。残念ながら、私の考えはひどいものでした。別の解決策を見つけなければなりません。Edge_descriptor タイプは理由があるようです...