Boost logo

Boost Users :

From: Aaron Windsor (aaron.windsor_at_[hidden])
Date: 2007-06-06 08:40:15


On 6/6/07, gast128 <gast128_at_[hidden]> wrote:
> Aaron Windsor <aaron.windsor <at> gmail.com> writes:
>
> >
> > On 6/5/07, gast128 <gast128 <at> hotmail.com> wrote:
> > > Aaron Windsor <aaron.windsor <at> gmail.com> writes:
> > >
> > > >
> > > > On 6/4/07, gast128 <gast128 <at> hotmail.com> wrote:
> > > > > Dear all,
> > > > >
> > > > > We want to (DLL) export a boost graph. Probably on (DLL) exporting, the
> > > > > compiler tries to generate code for every member function. However on
> > > VC++7.1
> > > > > it gives then a problem with operator[]. This can be easily verified
> with
> > > the
> > > > > following case:
> > > > >
> > > > > void Foo()
> > > > > {
> > > > > boost::adjacency_list<> graph;
> > > > > graph[0];
> > > > > }
> > > > >
> > > > > We use here Boost 1.33.0. Anyone an idea?
> > > > >
> > > > > Wkr,
> > > > > me
> > > >
> > > > Hi,
> > > >
> > > > What are you expecting the expression "graph[0]" to do/return in the code
> > > above?
> > > >
> > > > Regards,
> > > > Aaron
> > > >
> > >
> > > Nothing. It won't compile, complaining about return type. Same error if you
> > > try to export an adjacency_list.
> > >
> > > Wkr,
> > > me
> >
> > graph[0] accesses the bundled properties for the first vertex in the
> > graph, but you've declared an empty graph with no properties. So, even
> > if you got it to compile by adding some properties to the graph, 0
> > still isn't even a valid vertex descriptor, since the graph is empty.
> >
> > Regards,
> > Aaron
> >
>
> But that 's the problem I can't get it compile, even if I don't use an empty
> graph, e.g.:
>
> void Foo()
> {
> boost::adjacency_list<> graph;
> boost::adjacency_list<>::vertex_descriptor v = add_vertex(graph);
> graph[v];
> }

<snip>

My point in the previous email is that your graph doesn't have any
interior properties, but you're trying to access vertex properties -
this is what's causing the compile-time error. So, for instance, if
you added any bundled vertex property:

struct vertex_properties { int label; };

void Foo()
{
   typedef boost::adjacency_list<boost::vecS, boost::listS,
boost::undirectedS, vertex_properties> graph_t;
   graph_t graph;
   graph_t::vertex_descriptor v = add_vertex(graph);
   graph[v];
}

It should compile.

Regards,
Aaron


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net