我正在尝试使用read_graphviz扩展将graphviz .dot文件拉入Boost Grpah。这是我的样本。我无法编译。我在代码之后发布了g ++错误消息,但我不得不这么做,但是在没有重大格式化的情况下发布这里太长了。
graphviz.hpp库的文档过于简洁,无法指导我正确的方向。有人有什么想法吗?
#include <iostream>
#include <boost/graph/graph_traits.hpp>
#include <boost/graph/adjacency_list.hpp>
#include <boost/property_map.hpp>
#include <boost/graph/graphviz.hpp>
int main( int argc, char* argv[] )
{
assert( argc == 2 );
std::ifstream dotFile( argv[1], std::ifstream::in );
typedef boost::adjacency_list<> Graph;
Graph graph( 17 );
boost::dynamic_properties properties;
boost::property_map< Graph, boost::vertex_name_t >::type name = get( boost::vertex_name, graph );
properties.property( "node_id", name );
bool readResult;
readResult = read_graphviz( dotFile, graph, properties );
return 0;
g++ -Wall -c -o graphvizTest.o graphvizTest.cpp
/usr/include/boost/dynamic_property_map.hpp: In member function
std::string boost::detail::dynamic_property_map_adaptor<PropertyMap>::get_string(const boost::any&)
[with PropertyMap =
boost::vec_adj_list_vertex_property_map<
boost::adjacency_list<
boost::vecS, boost::vecS, boost::directedS,
boost::no_property, boost::no_property,
boost::no_property, boost::listS
>,
boost::adjacency_list<
boost::vecS, boost::vecS, boost::directedS, boost::no_property,
boost::no_property, boost::no_property, boost::listS
>*,
boost::detail::error_property_not_found,
boost::detail::error_property_not_found&,
boost::vertex_name_t
>
]':
graphvizTest.cpp:29: instantiated from here
/usr/include/boost/dynamic_property_map.hpp:196: error: no match for 'operator<<' in 'out << boost::get
[with
PropertyMap =
boost::vec_adj_list_vertex_property_map<
boost::adjacency_list<
boost::vecS, boost::vecS, boost::directedS, boost::no_property, boost::no_property,
boost::no_property, boost::listS
>,
boost::adjacency_list<
boost::vecS, boost::vecS, boost::directedS, boost::no_property, boost::no_property,
boost::no_property, boost::listS
>*,
boost::detail::error_property_not_found,
boost::detail::error_property_not_found&,
boost::vertex_name_t
>,
Reference = boost::detail::error_property_not_found&, K = long unsigned int
]
...
答案 0 :(得分:2)
图表中没有名为name
的节点属性,因此从get(boost::vertex_name, graph)
获取的属性映射是错误的。查看文档,了解如何为boost::vertex_name
添加顶点属性(使用旧式属性)或添加捆绑属性来表示名称,并在{{1}中使用get
表达式代替对象。