Генерация случайных чисел C++ с использованием Mersenne Twister

Я пытаюсь генерировать случайные числа в своей программе на С++. Он работает на моем ноутбуке, который работает под управлением Windows. Однако, когда я пытаюсь скомпилировать свою программу на другом компьютере, я получаю следующие сообщения об ошибках:

error: ‘mt19937_64’ was not declared in this scope
error: expected ‘;’ before ‘randomGenerator’

соответствующий следующему фрагменту кода:

double** Euler::startSimulation(void) {

    mt19937_64 randomGenerator (mySeed);

/* More unshown code below... */

}

Я компилирую свой код из командной строки, используя g++ с флагом -std=c++0x. Как мне решить эту проблему, чтобы мой код мог правильно компилироваться и работать на обоих компьютерах.


person covertbob    schedule 18.08.2013    source источник
comment
Оба компьютера 64-битные?   -  person Kirk Backus    schedule 19.08.2013
comment
да, оба компьютера 64-битные, однако на моем ноутбуке я использую Microsoft Visual Studio 2012, тогда как я компилирую в командной строке на другой машине, на которой работает Linux   -  person covertbob    schedule 19.08.2013
comment
Какая у вас версия GCC? (gcc - v) Лучше использовать 'std=C++11', а не '-std=c++0x'. -и- Попробуйте добавить флаг -m64 в GCC. -или- Проверить, работает ли std::mt19937 версия. -и- Попробуйте разрешить пространство имен явно: std::mt19937_64 вместо 'mt19937_64'.   -  person Ivan Aksamentov - Drop    schedule 19.08.2013
comment
std::mt19937 работает отлично, но другие предложения не работают. Когда я набираю gcc -v, я получаю: Цель: x86_64-redhat-linux, версия gcc 4.4.7 20120313 (Red Hat 4.4.7-3) (GCC)   -  person covertbob    schedule 19.08.2013
comment
GCC 4.4 немного устарел. Не уверен, что он правильно реализовал все функции С++ 11 (но я точно этого не знаю). Рассмотрите возможность обновления (sudo yum install gcc-4.8.1 glibc* libstd*). Насколько я знаю, 4.8.1 — это первая версия, полностью написанная на C++11 (и последняя на данный момент стабильная). И +1 за использование RedHat =)   -  person Ivan Aksamentov - Drop    schedule 19.08.2013


Ответы (1)


mt19937(_64) оба классифицированы в пространстве имен std.

Чтобы сделать их доступными, нужно указать компилятору, где их искать. Используйте либо std::mt19937_64 RdmGeneratorObject(seed);, либо директиву give using namespace std; перед открытием объявления функции или main.

person martin    schedule 12.12.2015