std :: random_shuffle, ошибка компилятора: нет подходящей функции для вызова - PullRequest
0 голосов
/ 03 сентября 2010

Я не могу скомпилировать следующий код g ++ 4.3.2:

#include <stdlib.h>
#include <algorithm>

struct Generator {
  ptrdiff_t operator() (ptrdiff_t max) {
    return rand() % max;
  }
};

Generator generator;
std::vector<size_t> indices;
// fill vector
std::random_shuffle(indices.begin(), indices.end(), generator); // error here!

Почему мой компилятор выдает следующую ошибку в последней строке?

error: no matching function for call to ‘random_shuffle(__gnu_cxx::__normal_iterator > >, __gnu_cxx::__normal_iterator > >, Generator&)’

Заранее спасибо!

1 Ответ

0 голосов
/ 03 сентября 2010

На самом деле в моем коде Generator структура объявлена ​​внутри функции. Я не знаю, wjy, но g ++ 4.3.2 не принимает это. После того, как я переместил объявление структуры из функции, компиляция прошла успешно. Я считаю, что это ошибка в компиляторе. Кроме того, оригинальный код был успешно скомпилирован более ранней версией g ++.

...