Fehler bei std::uniform_int_distribution



  • Moin

    Wenn ich die Funktion im Titel in einer Klasse verschiebe (anstelle global), bekomme ich folgenden Fehler:

    error: expected identifier before numeric constant|
    
    error: expected ‘,’ or ‘...’ before numeric constant|
    

    Wenn es global wäre, gibt es keinen Fehler.

    (Google Suche hab ich nicht wirklich brauchbares gefunden)

    Wo ist der Fehler?
    Prinzipiell: Es sollten keine globale Funktionen/Variablen oder? 🤡

    header.h

    class abcd{
    private:
    std::mt19937 create_seeded_rng()
            {
                std::random_device rd;
                std::array<std::mt19937::result_type, std::mt19937::state_size> seed_data;
                std::generate(seed_data.begin(), seed_data.end(), std::ref(rd));
                std::seed_seq seq(seed_data.begin(), seed_data.end());
                return std::mt19937(seq);
            }
    
            std::mt19937 rng = create_seeded_rng();
            std::uniform_int_distribution<int> dist(0, 100);
    };
    

    main.cpp

    dist(rng)
    

    Danke



  • Mein Compiler gibt an, an welcher Stelle ein Fehler aufgetreten ist ...

    Wenn das Beispiel vollständig wäre, könnte man es ja mal übersetzten ...



  • Ich tippe darauf, dass du den Konstruktor von uniform_int_distribution nicht in der Deklaration aufrufen solltest, sondern im Konstruktor.



  • hier mein vollständiges Beispiel:

    mwsalgorithm.h

    #ifndef MWSALGORITHM_H
    #define MWSALGORITHM_H
    #include <iostream>
    #include <mutex>
    #include <thread>
    #include <ctime>
    #include <array>
    #include <algorithm>
    #include <random>
    #include <iostream>
    
    class mwsalgorithm{
    private:
        class mwssingle{
        public:
            mwssingle() = default;
            ~mwssingle() = default;
            void testall();
            template <class X> void bubblesort(X *items,int count)
            {
                X t;
                for(int a=1; a<count; a++) {
                    for(int b=count-1; b>=a; b--) {
                        if(items[b-1] > items[b]) {
                            t = items[b-1];
                            items[b-1] = items[b];
                            items[b] = t;
                        }
                    }
                }
            }
        private:
    
            std::mt19937 create_seeded_rng()
            {
                std::random_device rd;
                std::array<std::mt19937::result_type, std::mt19937::state_size> seed_data;
                std::generate(seed_data.begin(), seed_data.end(), std::ref(rd));
                std::seed_seq seq(seed_data.begin(), seed_data.end());
                return std::mt19937(seq);
            }
            std::mt19937 rng = create_seeded_rng();
            std::uniform_int_distribution<int> dist(0, 100);
        };
        class mwsmulti{
        public:
            mwsmulti() = default;
            ~mwsmulti() = default;
        };
    public:
        mwsalgorithm() = default;
        ~mwsalgorithm() = default;
        mwssingle single;
        mwsmulti multi;
    };
    #endif // MWSALGORITHM_H
    

    main.cpp

    #include "mwsalgorithm.h"
    int main(int argv, char** argc) {
    
        return 0;
    }
    

    Danke



  • std::uniform_int_distribution<> dist = std::uniform_int_distribution<>(0, 100);
    

    oder

    std::uniform_int_distribution<> dist{0, 10};
    

    Die ganzen default Konstruktoren und Destruktoren sind immer noch überflüssig.



  • manni66 schrieb:

    std::uniform_int_distribution<> dist = std::uniform_int_distribution<>(0, 100);
    

    oder

    std::uniform_int_distribution<> dist{0, 10};
    

    Die ganzen default Konstruktoren und Destruktoren sind immer noch überflüssig.

    Danke

    (Die haben ich so eben gelöscht, danke.)


Anmelden zum Antworten