由于某种原因,我无法使用 uniform_int_distribution
(来自 C++ TR1 header <tr1/random>
)在 Mingw-w64 G++ 中,即使 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
。有什么想法吗?
最佳答案
好吧,我把 C++ TR1 和 C++11 头文件搞混了。
由于误读了 GCC 文档,我使用了 C++ TR1 header ,但事实证明 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
输出 - 编译器告诉我模板参数必须是浮点类型。)
关于c++ - 无法在 Mingw-w64 中使用 "uniform_int_distribution",但 "exponential_distribution"可以使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27463971/