|
Boost Users : |
Subject: Re: [Boost-users] Boost Graph: vertex class has no copy constructor
From: Andrew Sutton (andrew.n.sutton_at_[hidden])
Date: 2010-03-26 17:18:31
> The "easy" workaround is to simply have the graph refer to BasicBlock by
>> pointer instead of actually owning it. Pointers are definitely default and
>> copy constructible :)
>>
>
> Yes, I had tried that, and the pointers are added to the graph okay using
> add_vertex, but when I try to pull them out using, say, graph[0], my program
> segfaults. I have no idea what I'm doing wrong.
It's not surprising that graph[0] crashes for directed_graph; it's vertex
descriptors are actually list iterators. It turns out that 0 is an implicit
constructor for directed_graph<...>::null_vertex().
The (current BGL) documentation doesn't spell this out very well, and almost
none of the examples demonstrate this fact. I think you could use:
graph[vertex(g, 0)]
but that might be O(n).
I should do maybe:
>
> typedef adjacency_list<vecS, vecS, directedS, BasicBlock*> TimingGraph;
>
If you're not going to remove vertices, then that's probably a good bet. I
forget if this is good for removing edges also. I'm guessing "no".
Andrew Sutton
andrew.n.sutton_at_[hidden]
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