我正在尝试使用c ++ 0x编译我的第一段代码。我对C ++很不错,但是这个让我很难过。以下内容无法编译:
#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
奇怪的是,它编译过mt19937实例化,如果我只是调用mt19937::operator()
,我会按预期得到输出。此外,如果我将分配切换到normal_distribution,它会编译并输出“帮助”行,但不执行任何其他操作。可以看到该过程通过ps aux
运行,但没有输出。
我错过了一些愚蠢的东西吗?我基本上从cplusplus.com复制代码来显示一个mwe。谢谢你的帮助
答案 0 :(得分:2)
您必须升级到更高版本的编译器(您的程序在GCC 4.7.2上编译正常)。 GCC 4.4.5附带的标准库的实现显然不符合(完全)C ++ 11。