std :: random_shuffle,编译错误:没有匹配的调用函数

时间:2010-09-03 08:05:51

标签: c++ gcc stl

我无法通过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 :(得分:0)

实际上我的代码Generator结构是在函数中声明的。我不知道wjy,但g ++ 4.3.2不接受这个。在我将结构声明移出函数后,编译成功了。我相信这是编译器中的一个错误。此外,早期版本的g ++成功编译了原始代码。