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.)