不能使用" uniform_int_distribution"在Mingw-w64,但" exponential_distribution"作品

时间:2014-12-13 21:47:06

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

出于某种原因,我不能在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::tr1std。有什么想法吗?

1 个答案:

答案 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输出 - 编译器告诉我模板参数必须是一个浮点类型。)