c++ - 无法在 Mingw-w64 中使用 "uniform_int_distribution",但 "exponential_distribution"可以使用

标签 c++ c++11 random g++ mingw-w64

由于某种原因,我无法使用 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::tr1std 。有什么想法吗?

最佳答案

好吧,我把 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/

相关文章:

c++ - 动态字符串数组 - C

c# - 从控制台应用程序生成随机 JPG 图像

c++ - 为什么我随机生成的数组只输出零?

performance - Julia 从标准正态分布中绘制

c++ - 通过外部信号停止 std::thread 的有效方法是什么?

c++ - 这是非多态继承的一个很好的理由吗?

c++ - Qt:我无法在 QApplication 的子类中安装翻译器

c++ - 如何将一个矩阵附加到另一个矩阵的末尾? (在 C++ 中使用 Boost 库)

c++ - 何时使用哪种排序算法,何时绝对不应该

c++ - map 内容未以特定方式打印