Не могу скомпилировать код используя Boost graphviz.hpp - PullRequest
2 голосов
/ 12 июня 2009

Я пытаюсь использовать расширение 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
]

...

1 Ответ

2 голосов
/ 14 марта 2011

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

...