出于某种原因,我不能在Mingw-w64 G ++中使用uniform_int_distribution
(来自C ++ TR1标题<tr1/random>
),即使exponential_distribution
有效。以下是相关代码:
#include <tr1/random>
using namespace std;
int main() {
tr1::random_device rd;
tr1::exponential_distribution<int> exprng(1);
tr1::uniform_int_distribution<> unirng(5, 500);
tr1::mt19937 rnd_gen(rd());
// ...
}
当我尝试编译它时,我明白了:
> g++ -o foo.exe -std=c++11 foo.cpp
foo.cpp: In function 'int main()':
foo.cpp:8:5: error: 'uniform_int_distribution' is not a member of 'std::tr1'
tr1::uniform_int_distribution<> unirng(5, 500)
^
foo.cpp:8:35: error: expected primary-expression before '>' token
tr1::uniform_int_distribution<> unirng(5, 500);
^
foo.cpp:8:50: error: 'unirng' was not declared in this scope
tr1::uniform_int_distribution<> unirng(5, 500);
^
我正在运行最新版本的编译器,4.9.2。我们已尝试删除using namespace std
并将名称空间前缀更改为std::tr1
和std
。有什么想法吗?
答案 0 :(得分:2)
好的,我把C ++ TR1和C ++ 11标题混淆了。
由于我误读了GCC文档,我使用的是C ++ TR1标头,但事实证明uniform_int_distribution
是C ++ 11的一部分。 C ++ 11和C ++ TR1并不完全与源代码兼容,需要进行微调。
更正后的代码如下:
#include <random>
using namespace std;
int main() {
random_device rd;
exponential_distribution<> exprng(1);
uniform_int_distribution<> unirng(5, 500);
mt19937 rnd_gen(rd());
// ...
}
(我稍后会在程序中转换exponential_distribution
输出 - 编译器告诉我模板参数必须是一个浮点类型。)