2010-09-03 75 views
1

沒有匹配的功能,我不能用g ++ 4.3.2編譯下面的代碼:的std :: random_shuffle,compliler錯誤:呼叫

 
#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! 

爲什麼我的編譯器會引發以下錯誤在最後一行?

錯誤:調用「random_shuffle(__ gnu_cxx :: __ normal_iterator <長的無符號整型*,性病::矢量<長的無符號整型,性病::分配器<長unsigned int類型> > >,__gnu_cxx ::沒有匹配的功能__normal_iterator <長的無符號整型*,性病::矢量<長的無符號整型,性病::分配器<長unsigned int類型> > >,發電機&)」

提前感謝!

回答

0

其實在我的代碼Generator結構是在一個函數內聲明的。我不知道wjy,但g ++ 4.3.2不接受這個。在將結構聲明移出函數之後,編譯成功。我相信這是編譯器中的一個錯誤。此外原始代碼由g ++的早期版本成功編譯。

+5

您不能實例化具有本地類型的模板。 'random_shuffle'是一個類模板,'Generator'是一個本地類型。這就是爲什麼如果你移動'Generator'使它不是本地類型的原因。 – 2010-09-03 08:14:22

+2

這應該適用於C++ 11,但不適用於C++ 98。 – 2011-08-23 13:22:36