
Hi, First of all thank you for providign the boost BGL library. I use it extensively. I am having some problems with some code, that works just fine using boost version 1.46, but cannot compile using version 1.48 and higher. I have a Bidirectional Graph using bundled properties defined as: struct Port { Port(int index=-1, int type=-1, int port_code=0, string UN="NN", string name="NN", int service_id=-1 ): m_index(index), m_type(type), m_port_code( port_code), UNLOCODE(UN), m_name(name), m_service_id(service_id) {} int m_index; int m_type;//0 port, 1 port call int m_port_code; string UNLOCODE; string m_name; int m_service_id; }; struct Edge { Edge( int id=-1, int type=-1, double weight=0.0, double cost=0.0, double dual_cost=0.0, double util=0.0, double cap=0.0, double r_cap=0.0 ) : m_idx(id), m_type(type), m_weight(weight) , m_cost(cost), m_dual_cost(dual_cost), m_utilization(util), m_capacity(cap), m_res_cap(r_cap) {} unsigned int m_idx; int m_type;//0 is load edge, 1 is voyage edge, 2 forfeited edge (commodity link) double m_weight; //distance double m_cost; //cost - only on load/unload/transhipment edges double m_dual_cost; double m_utilization; double m_capacity; double m_res_cap; //residual capacity }; //Graph typedef adjacency_list< vecS , vecS , bidirectionalS, Port, Edge> mcf_graph; I am trying to make a call to dijkstra on a reversed graph as follows: (the reversed graph is also a filtered graph, but I do not think this is an issue: dijkstra_shortest_paths (make_reverse_graph(fg), before_p, predecessor_map ( &p[0] ).distance_map ( &d[0] ).weight_map ( get ( &Edge::m_weight, fg) ).vertex_index_map ( get ( vertex_index,fg ) ) ); which works fine in 1.46, but it seems in 1.48 I can no longer use make_reverse_graph(<mcf_graph&>) (returning a reverse graph) with the bundled properties from fg. and I get the error (compressed summary - full details attached) usr/include/boost/property_map/property_map.hpp:354:56: error: no match for 'operator[]' in '((const boost::bundle_property_map<boost::adjacency_list<boost::vecS, boost::vecS, boost::bidirectionalS, Port, Edge>, boost::detail::edge_desc_impl<boost::bidirectional_tag, long unsigned int>, Edge, double>&)pa)[k]' /usr/include/boost/property_map/property_map.hpp:354:56: note: candidate is: In file included from /usr/include/boost/graph/adjacency_list.hpp:44:0, from /home/chrkr/git/lsndp/include/ipheuristic.h:36, from /home/chrkr/git/lsndp/src/ipheuristic.cpp:29: /usr/include/boost/graph/properties.hpp:399:15: note: T& boost::bundle_property_map<Graph, Descriptor, Bundle, T>::operator[](boost::bundle_property_map<Graph, Descriptor, Bundle, T>::key_type) const [with Graph = boost::adjacency_list<boost::vecS, boost::vecS, boost::bidirectionalS, Port, Edge>; Descriptor = boost::detail::edge_desc_impl<boost::bidirectional_tag, long unsigned int>; Bundle = Edge; T = double; boost::bundle_property_map<Graph, Descriptor, Bundle, T>::reference = double&; boost::bundle_property_map<Graph, Descriptor, Bundle, T>::key_type = boost::detail::edge_desc_impl<boost::bidirectional_tag, long unsigned int>] /usr/include/boost/graph/properties.hpp:399:15: note: no known conversion for argument 1 from 'const boost::detail::reverse_graph_edge_descriptor<boost::detail::edge_desc_impl<boost::bidirectional_tag, long unsigned int> >' to 'boost::bundle_property_map<boost::adjacency_list<boost::vecS, boost::vecS, boost::bidirectionalS, Port, Edge>, boost::detail::edge_desc_impl<boost::bidirectional_tag, long unsigned int>, Edge, double>::key_type {aka boost::detail::edge_desc_impl<boost::bidirectional_tag, long unsigned int>}' From various sources I understand that as of 1.48 reverse graph is no longer an image of the graph, but another object, where I need the actual property maps and the property maps of the reversed graph, but I did not get much wiser on how to call dijkstra with the reversed graph given these new description. I tried defining the reverse graph as a separate object reverse_graph<mcf_graph> r_fg=reverse_graph(fg); dijkstra_shortest_paths (r_fg), before_p, predecessor_map ( &p[0] ).distance_map ( &d[0] ).weight_map ( get ( &Edge::m_weight, r_fg) ).vertex_index_map ( get ( vertex_index, r_fg ) ) ); indicating that I am not getting the right properties for the reverse graph: equired from here /usr/include/boost/graph/properties.hpp:420:44: error: no type named 'vertex_bundled' in 'class boost::reverse_graph<boost::adjacency_list<boost::vecS, boost::vecS, boost::bidirectionalS, Port, Edge> >' /usr/include/boost/graph/properties.hpp:421:42: error: no type named 'edge_bundled' in 'class boost::reverse_graph<boost::adjacency_list<boost::vecS, boost::vecS, boost::bidirectionalS, Port, Edge> >' /usr/include/boost/graph/properties.hpp:425:7: error: no type named 'vertex_bundled' in 'class boost::reverse_graph<boost::adjacency_list<boost::vecS, boost::vecS, boost::bidirectionalS, Port, Edge> >' /usr/include/boost/graph/properties.hpp:429:7: error: no type named 'vertex_bundled' in 'class boost::reverse_graph<boost::adjacency_list<boost::vecS, boost::vecS, boost::bidirectionalS, Port, Edge> >' /usr/include/boost/graph/properties.hpp:432:70: error: no type named 'vertex_bundled' in 'class boost::reverse_graph<boost::adjacency_list<boost::vecS, boost::vecS, boost::bidirectionalS, Port, Edge> >' /usr/include/boost/graph/properties.hpp:434:7: error: no type named 'vertex_bundled' in 'class boost::reverse_graph<boost::adjacency_list<boost::vecS, boost::vecS, boost::bidirectionalS, Port, Edge> >' /home/chrkr/git/lsndp/src/ipheuristic.cpp:939:132: error: no matching function for call to 'get(double Edge::*, boost::reverse_graph<boost::adjacency_list<boost::vecS, boost::vecS, boost::bidirectionalS, Port, Edge> >&)' /home/chrkr/git/lsndp/src/ipheuristic.cpp:939:132: note: candidates are: In file included from /usr/include/boost/graph/adjacency_list.hpp:36:0, from /home/chrkr/git/lsndp/include/ipheuristic.h:36, from /home/chrkr/git/lsndp/src/ipheuristic.cpp:29: /usr/include/boost/property_map/property_map.hpp:179:19: note: template<class T> const T& get(const T*, std::ptrdiff_t) /usr/include/boost/property_map/property_map.hpp:179:19: note: template argument deduction/substitution failed: /home/chrkr/git/lsndp/src/ipheuristic.cpp:939:132: note: mismatched types 'const T*' and 'double Edge::*' In file included from /usr/include/boost/graph/graphviz.hpp:25:0, from /home/chrkr/git/lsndp/include/data.h:19, from /home/chrkr/git/lsndp/include/ipheuristic.h:46, from /home/chrkr/git/lsndp/src/ipheuristic.cpp:29: /usr/include/boost/property_map/dynamic_property_map.hpp:322:1: note: template<class Key> std::string boost::get(const string&, const boost::dynamic_properties&, const Key&) /usr/include/boost/property_map/dynamic_property_map.hpp:322:1: note: template argument deduction/substitution failed: Is the problem the bundled properties from the original graph or ? -- Best Regards, Ph.D. Berit Dangaard Brouer Post Doc. DTU Management Engineering, Management Science Technical University of Denmark Department of Management Engineering Produktionstorvet, Bygning 426 2800 Kgs. Lyngby blof@dtu.dk <mailto:blof@man.dtu.dk> www.ms.man.dtu.dk <http://www.ms.man.dtu.dk> http://www.maersk.com/innovation/leadingthroughinnovation/enerplan/ Please read about the ENERPLAN project here <http://www.maersk.com/innovation/leadingthroughinnovation/enerplan/>