BGL: вызов strong_components не компилируется, если включен random_spanning_tree.hpp - PullRequest
0 голосов
/ 09 сентября 2018

Это странно, я надеялся использовать 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, но как их получить нигде не указано).

1 Ответ

0 голосов
/ 09 сентября 2018

Здесь нет проблем: Live On Coliru

Также попробуйте

Что заставляет меня поверить, что это проблема с остальной частью вашего кода / конфигурации компилятора.

Вы на окнах? Я вижу max, который является МАКРО в windows.h. Не забудьте включить это (также отметьте stdafx.h, если вы используете его)

UPDATE

После вашего редактирования я смог воспроизвести ошибку. Это ошибка в надстройке, и я создал для нее тикет в трекер ошибок

...