由于某些原因,我不能在明威-W64 uniform_int_distribution中使用C++ TR1 header <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。有什么想法吗?
发布于 2014-12-13 22:03:33
好的,我把C++ TR1和C++11头搞混了。
我之所以使用C++ TR1 headers是因为我误读了GCC文档,但事实证明,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输出-编译器告诉我模板参数必须是浮点类型。)
https://stackoverflow.com/questions/27463971
复制相似问题