Как посеять mt19937 один раз для каждого приложения в C ++ и использовать его несколько раз? - PullRequest
0 голосов
/ 23 марта 2019

Я могу получить mt19937 rng в простом приложении. Теперь я пытаюсь сделать его посеянным для каждого приложения и использовать его несколько раз, когда это необходимо. Вот мой код Я получаю ошибку в GenerateRandomNumber - «gen: undeclared identifier».

main.cpp

#include <iostream>
#include "general.h"

int main() {

CallOncePerApp();

// Loop for output testing
// Ultimately, GenerateRandomNumber can be called from anywhere in any CPP file
for (int i=0;i<10;i++)  {
    int dwGen = GenerateRandomNumber(1, 1000);
    cout << dwGen; // print the raw output of the generator.
    cout << endl;
    }
}

general.h:

#include <random>

using namespace std;

extern random_device rd;
extern void CallOncePerApp();
extern mt19937 gen;

extern unsigned int GenerateRandomNumber(unsigned int dwMin, unsigned int dwMax);

general.cpp:

#include <random>

using namespace std;
random_device rd;
mt19937 gen;

void CallOncePerApp() 
{
    // Error C2064 term does not evaluate to a function taking 1 arguments
    gen(rd); // Perform the seed once per app
}

unsigned int GenerateRandomNumber(unsigned int dwMin, unsigned int dwMax) 
{
    uniform_int_distribution <int> dist(dwMin, dwMax); // distribute results between dwMin and dwMax inclusive.
    return dist(gen);
}

1 Ответ

0 голосов
/ 24 марта 2019

Здесь

mt19937 gen; // gen is an object of class mt19937! not a function

void CallOncePerApp() 
{
    // Error C2064 term does not evaluate to a function taking 1 arguments
    gen(rd); // **** therefore this line is wrong!
}

Также вам необходимо включить файл заголовка в файл "general.cpp".

...