Помогите, плз, разобраться.
Имеется граф:
Код:
typedef boost::adjacency_list <
listS, //list vertex
listS, //list edge
directedS,
property < vertex_name_t, int, // num_nod
property < vertex_index_t, string > >, //POINT( X Y )
property < edge_weight_t, float > //distance edge
> r_graph_t;
Где-то в коде
Код:
...
r_graph_t * rg = new r_graph_t(N)
...
//заполняем граф
...
//создаем строку, содержащую значение свойства vertex_index вершины
...
std::string * tmp_str = new string( "tra_ta_ta" );
/*строка 293*/ tmp_str->append( boost::get( vertex_index, *rg, vri1->vd ));
где
- имя свойства,
- граф,
- дескриптор вершины.
Компилируется и работает.
Теперь я меняю тип хранилища для
граней графа на
( вместо
edge )
После этого компилятор ругается следующим образом:
Код:
a_0.cc:293: error: invalid conversion from `size_t' to `const char*'
a_0.cc:293: error: initializing argument 1 of `std::basic_string<_CharT, _Traits, _Alloc>& std::basic_string<_CharT, _Traits, _Alloc>::append(const _CharT*) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]'
Что это значит?
Я поменял тип хранилища для граней. Только и всего. Значение свойства извлекаю из вершины.
Из руководства по boost graph
Код:
template <typename PropertyTag, typename X>
typename property_traits<
typename property_map<adjacency_list,
PropertyTag>::const_type>::value_type
get( PropertyTag, const adjacency_list& g, X x)
Цитата:
Возвращает значение свойства для
, где
дескриптор вершины или ребра.
На этом моя мысль останавливается.