I am trying to use an adjacency list with bundled properties and running
into lots of problems. I'm wondering if bundled properties is mature
enough, or if I should resort to the older style using property maps.
Here's a description of one problem I've run into:
So I define my graph class with bundled properties as so:
struct MyV {
int numStars;
};
struct MyE {
int numStars;
};
typedef adjacency_list MyGraph;
I would like to perform dfs on this graph.
So I have a very simple visitor defined:
struct star_visitor : public boost::default_dfs_visitor
{
template void
start_vertex(Vertex v, const Graph &)
{
std::cout << 'start';
}
template void
discover_vertex(Vertex v, const Graph &)
{
std::cout << "*";
}
template void
finish_vertex(Vertex v, const Graph &)
{
std::cout << 'finish';
}
};
Then in my main function, I make a MyGraph object and put in vertices
and edges, and assign property values. That works fine.
MyGraph g;
MyGraph::vertex_descriptor v1 = addVertex(g);
MyGraph::vertex_descriptor v2 = addVertex(g);
MyGraph::edge_descriptor e2 = addEdge(v1, v2, g);
g[*v1].numStars = 100;
g[*v2].numStars = 2;
g[*e1].numStars = 7;
Then I perform dfs on my graph
depth_first_search(g, visitor(star_vis));
And I get the following errors. I don't get these errors and my program
compiles fine if I do a dfs with my star_visitor on a graph with no
properties.
Main.cpp
c:\boost_1_33_1\boost\property_map.hpp(349) : error C2679: binary
'+' : no operator found which takes a right-hand operand of type
'const boost::detail::error_property_not_found' (or there is no
acceptable conversion)
c:\program files\microsoft visual studio
8\vc\include\vector(366): could be
'std::_Vector_iterator<_Ty,_Alloc>
std::_Vector_iterator<_Ty,_Alloc>::operator +(__w64 int) const'
with
[
_Ty=boost::default_color_type,
_Alloc=std::allocator
]
while trying to match the argument list '(const
std::_Vector_iterator<_Ty,_Alloc>, const
boost::detail::error_property_not_found)'
with
[
_Ty=boost::default_color_type,
_Alloc=std::allocator
]
c:\boost_1_33_1\boost\property_map.hpp(349) : while
compiling class template member function 'boost::default_color_type
boost::iterator_property_map::operator [](void *) const'
with
[
RandomAccessIterator=std::_Vector_iterator>,
IndexMap=boost::adj_list_vertex_property_map,
T=boost::default_color_type,
R=boost::default_color_type &
]
c:\documents and
settings\istreinu\desktop\naomi\boost_1_33_1\boost\graph\depth_first_search.hpp(250)
: see reference to class template instantiation
'boost::iterator_property_map' being compiled
with
[
RandomAccessIterator=std::_Vector_iterator>,
IndexMap=boost::adj_list_vertex_property_map,
T=boost::default_color_type,
R=boost::default_color_type &
]
c:\documents and
settings\istreinu\desktop\naomi\boost_1_33_1\boost\graph\depth_first_search.hpp(332)
: see reference to function template instantiation 'void
boost::detail::dfs_dispatch::apply(const VertexListGraph
&,DFSVisitor,Vertex,const boost::bgl_named_params
&,boost::detail::error_property_not_found)' being compiled
with
[
VertexListGraph=MyGraph,
DFSVisitor=Star_visitor,
Vertex=void *,
T=Star_visitor,
Tag=boost::graph_visitor_t,
Base=boost::no_property
]
c:\documents and settings\istreinu\my documents\visual
studio 2005\projects\refactorfirst\refactorfirst\main.cpp(228) : see
reference to function template instantiation 'void
boost::depth_first_search(const VertexListGraph &,const
boost::bgl_named_params &)' being compiled
with
[
VertexListGraph=MyGraph,
T=Star_visitor,
Tag=boost::graph_visitor_t,
Base=boost::no_property
]