2009-06-12 5 views
2

Я пытаюсь использовать расширение read_graphviz, чтобы вытащить файл .vt graphviz в Boost Grpah. Вот мой пример. Я не могу его скомпилировать. Я отправил сообщение об ошибке g ++ после кода, но мне пришлось, но это было коротко, слишком много времени для публикации здесь без значительного повторного форматирования.Невозможно скомпилировать код с помощью Boost graphviz.hpp

Документация Библиотека 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 
] 

... 
+1

Вы не указали строку 29 graphvizTest.cpp .... –

+0

Я очистил код, когда отправил вопрос и удалил пару строк. Строка, вызывающая ошибку, является второй из последней, вызов read_graphviz. –

ответ

2

Там нет свойства узла с именем name в вашем графике, и поэтому карта собственности вы получите от get(boost::vertex_name, graph) ошибки. Посмотрите документацию о том, как добавить свойство вершины для boost::vertex_name (используя свойства старого стиля) или добавить связанное свойство для представления имени и использовать это вместо выражения get в вашем объекте dynamic_properties.