Я пытаюсь скомпилировать свой первый фрагмент кода с помощью C++ 0x. Я очень хорошо знаком с C++, но у меня есть я в тупике. Ниже не компилируется:C++ 0x: uniform_real_distribution не является членом std
#include <iostream>
#include <random>
int main()
{
unsigned seed = 12345;
std::mt19937 generator(seed);
std::uniform_real_distribution<double> distro1(0.0, 1.0);
for (unsigned int i = 0; i < 25; i++)
{
std::cout << "Help" << std::endl;
std::cout << "Value == " << distro1(generator) << std::endl;
}
}
компилировать следующим:
g++ -std=c++0x myFile.cpp or with g++ -std=gnu++0x myFile.cpp
Ошибки я получаю являются:
myFile.cpp: In function ‘int main()’:
myFile.cpp:11: error: ‘uniform_real_distribution’ is not a member of ‘std’
myFile.cpp:11: error: expected primary-expression before ‘double’
myFile.cpp:11: error: expected ‘;’ before ‘double’
myFile.cpp:15: error: ‘distro1’ was not declared in this scope
G ++ является: g++ --version
g++ (Debian 4.4.5-8) 4.4.5
Странно en он компилируется мимо экземпляра mt19937, и если я просто позвоню mt19937::operator()
, я получаю вывод, как ожидалось. Также, если я переключу дистрибутивы на normal_distribution, он компилирует и выводит строку «Справка», но ничего не делает. Процесс можно увидеть через ps aux
, но без вывода.
Я пропустил что-то глупое? Я по существу скопировал код cplusplus.com, чтобы показать mwe. Спасибо за помощь
Возможно, это просто не реализовано? – chris
Какая версия вашего STL? –
Возможно, ваш компилятор слишком стар. Компилирует с 4.7.2. –