Это странно, я надеялся использовать boost::random_spanning_tree
в существующей функции, которая также вызывает boost::strong_components
, но простое включение boost/graph/random_spanning_tree.hpp
без изменения кода приводит к тому, что gcc выдает ошибку компиляции.
Функция выглядит примерно так:
#include "boost/graph/adjacency_list.hpp"
#include "boost/graph/strong_components.hpp"
//#include "boost/graph/random_spanning_tree.hpp" // can't include this!
void foo() {
boost::adjacency_list<boost::vecS, boost::vecS, boost::directedS> g;
// TODO: add some vertices
std::vector<unsigned> component(boost::num_vertices(g));
unsigned num = boost::strong_components(g, &component[0]);
}
и GCC жалуется:
error: no matching function for call to ‘get(unsigned int*&, boost::graph_traits<boost::adjacency_list<boost::vecS, boost::vecS, boost::directedS> >::vertex_descriptor&)’
if (get(comp, w) == (std::numeric_limits<comp_type>::max)())
Является ли сам код ошибочным или это проблема с Boost?
EDIT:
Я должен извиниться, я допустил небольшую ошибку в своем минимальном примере, приведенный выше код не скомпилируется в моей системе (Linus, g ++ 8.2.1, Boost 1.67), если boost/graph/random_spanning_tree.hpp
включен перед boost/graph/strong_components.hpp
. Используя wandbox, я не нашел комбинацию версии компилятора / Boost, для которой этого не происходит.
Я бы подал заявку на это, но Boost делает это излишне трудным (у меня нет прав TICKET_CREATE
для Boost's Trac, но как их получить нигде не указано).