2013-05-20 4 views
2

Я пытаюсь скомпилировать свой первый фрагмент кода с помощью 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. Спасибо за помощь

+0

Возможно, это просто не реализовано? – chris

+0

Какая версия вашего STL? –

+0

Возможно, ваш компилятор слишком стар. Компилирует с 4.7.2. –

ответ

2

Вам необходимо перейти на более позднюю версию вашего компилятора (ваша программа компилируется в GCC 4.7.2). Внедрение стандартной библиотеки, которая поставляется с GCC 4.4.5, явно не полностью (совместимо с C++ 11).

+0

=> [G ++ C++ 0x Status] (http://gcc.gnu.org/gcc-4.4/cxx0x_status.html) для 4.4 –

+0

@ ultima_rat0: Это поддержка основного языка. Я не мог найти подобную страницу для стандартного покрытия библиотеки. –

+0

Я предполагал, что это было что-то глупое, но не думал, что g ++ выпустит только с частью реализованной стандартной версии. Придется заглянуть в обновление компилятора – JohnML

Смежные вопросы