首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能在明w-w64中使用"uniform_int_distribution“,但"exponential_distribution”可以工作。

不能在明w-w64中使用"uniform_int_distribution“,但"exponential_distribution”可以工作。
EN

Stack Overflow用户
提问于 2014-12-13 21:47:06
回答 1查看 532关注 0票数 2

由于某些原因,我不能在明威-W64 uniform_int_distribution中使用C++ TR1 header <tr1/random>,尽管exponential_distribution可以工作。以下是有关守则:

代码语言:javascript
复制
#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());
    // ...
}

当我试图编译它时,我得到了以下信息:

代码语言:javascript
复制
> 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。有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-13 22:03:33

好的,我把C++ TR1和C++11头搞混了。

我之所以使用C++ TR1 headers是因为我误读了GCC文档,但事实证明,uniform_int_distribution是C++11的一部分。C++11和C++ TR1并不完全兼容源代码,需要做一些小的调整。

修正后的代码如下:

代码语言:javascript
复制
#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输出-编译器告诉我模板参数必须是浮点类型。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27463971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档