我在使用 Boost 图形库的邻接表时遇到问题。这似乎是一个循环依赖问题: 我有一个使用类 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 这样的原始类型。那本来可以解决问题,因为我本来可以用普通的 int 变量替换 Lane 的 edge_descriptors,因此可以删除 tie.hpp 中包含的 graphdefinitions.hpp。不幸的是,我的想法很疯狂*,我必须找到另一种解决方案。 Edge_descriptor 类型似乎是有原因的......
最佳答案
BGL 中有一个没有很好记录的特征类,它在不需要知道属性类型的情况下为 adjacency_list
图提供顶点和边描述符类型。它专为您的用例而设计。查看 http://www.boost.org/doc/libs/1_45_0/libs/graph/doc/adjacency_list.html 的“关联类型”部分并注意 vertex_descriptor
和 edge_descriptor
有两个定义;您可以在属性包的定义中使用来自 adjacency_list_traits
的版本,而不会导致循环定义。
关于c++ - 如何解决 Boost::BGL 模板<->类循环依赖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4232409/