I am currently making a class for which I'd like one of the private members to be initialised with a random number each time the object is created. The following code causes no problem:
private:
unsigned random = rand() % 10;
I would, however, like to use the C++11 random engines and distributions to do this. I would like to be able to do something along the lines of the following code, which will not compile but will give a general idea of what I'm trying to do:
private:
unsigned random = distribution(mersenne_generator(seed));
static std::random_device seed_generator;
static unsigned seed = seed_generator(); //So that it's not a new seed each time.
static std::mt19937 mersenne_generator;
static std::uniform_int_distribution<unsigned> distribution(0, 10);
This code won't compile because I'm trying to define some of the static members in the class. I'm not sure where to define them, however. I could create a member function that initialises everything, but then I would have to run it in main, which I don't want to. I would like to just sort out all the random definitions in class so that when I create an object in main, it will create the random number implicitly. Any suggestions?
You need to define the static data members outside the class definition. For instance, this will work:
The definitions for the static data members should be placed in a .cpp file, else you run the risk of violating the one definition rule.
Live example