Code kompiliert mit MSVC++ aber nicht mit g++
-
Hi,
folgender Code (im Forum gefunden) wird mit MSVC++ ohne Probleme kompiliert aber unter Linux mit dem G++, bekomme ich folgende Fehlermeldung:
error: 'class std::random_device' has no member named 'generate'boost::dynamic_bitset<> generate(boost::dynamic_bitset<>::size_type n) { static std::random_device rd; const int bpb = boost::dynamic_bitset<>::bits_per_block; std::vector<boost::dynamic_bitset<>::block_type> arr((n+bpb-1)/bpb); static std::independent_bits_engine<std::minstd_rand, boost::dynamic_bitset<>::bits_per_block, boost::dynamic_bitset<>::block_width_type> engine(rd); std::generate(arr.begin(), arr.end(),std::ref(engine)); boost::dynamic_bitset<> ret(std::begin(arr), std::end(arr)); return ret; }Wenn die dritt und viertletzte Zeile auskommentiert ist dann klappt es.
Woran liegt das?
-
Fehlende C++11-Unterstützung?
-
Ich benutze g++ version 4.7.2 mit -std=c++11 flag
-
hä ich verstehe die fehlermeldung nicht. es wird doch nirgends im code std::random_device::generate versucht aufzurufen...
-
den header <algorithm> eingebunden ? in dem liegt generate nämlich.
-
Ja alles eingebunden, das Programm laeuft ja unter Windows aber unter Linux auf einmal nicht.
-
Der Konstruktor will wohl keinen generator, sondern ein seed.
static std::independent_bits_engine<std::minstd_rand, boost::dynamic_bitset<>::bits_per_block, boost::dynamic_bitset<>::block_width_type> engine(rd());Aber wieso sollte VC das kompilieren?!
-
Danke jetzt klappt es!
Ich benutze Visual C++ 2010 Prof. Ich bin kein C++ Experte aber in der Header finde ich diese def. da steht was von "Engine"template<class _Engine, size_t _Wx, class _UIntType> class independent_bits_engine { // template class for independent_bits_engine compound engine public: typedef independent_bits_engine<_Engine, _Wx, _UIntType> _Myt; typedef _Engine base_type; typedef _UIntType result_type; typedef typename _Engine::result_type _Eres; independent_bits_engine() { // construct _Init(); } explicit independent_bits_engine(const base_type& _Ex) : _Eng(_Ex) { // construct with engine initializer _Ex _Init(); } explicit independent_bits_engine(result_type _X0) : _Eng(_X0) { // construct from specified seed value _Init(); } explicit independent_bits_engine(seed_seq& _Seq) : _Eng(_Seq) { // construct from seed sequence _Init(); }