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();
    		}
    

Anmelden zum Antworten