我在这个主题上发现了很多问题,但所有问题似乎与不使用C ++ 11进行编译有关。我的代码是
#include <random>
int main(int argc, char *argv[]){
std::default_random_engine generator;
return 0;
}
即使我用
编译gcc -std=c++0x testmain.cpp
给出default_random_engine不是std成员的错误。该程序是在一台远程机器上编译的,我不会自己维护,但
gcc -v
产生4.4.7版本。
有什么想法吗?
答案 0 :(得分:5)
正如DevSolar已经说过的,你的gcc版本太旧了,无法支持这个C ++ 11的功能。
已添加到 gcc-4.5 :
改进了即将推出的ISO C ++标准的实验支持, C ++ 0x,包括:
支持
<future>
,<functional>
和<random>
。
参考: https://gcc.gnu.org/gcc-4.5/changes.html
这也反映在libstdc ++ API参考:https://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-api-4.5/a01118.html
中您可以在其中找到以下内容:
typedef minstd_rand0 default_random_engine
您的代码适用于我:gcc-5.1.0
,gcc-4.9.2
和clang-3.7.0
,
此外,您应该使用command
: g ++ 而不是 gcc ,以便默认情况下gcc链接到正确的c ++图书馆。
答案 1 :(得分:1)
您的问题是您没有使用C ++ 11进行编译。 ;-)(对不起,无法抗拒。)
GCC 4.4.7的日期为2012年3月。该版本尚未完成C ++ 11支持。
截至撰写本文时,GCC的当前版本为5.2.0 ......符合C ++ 14 标准。是时候更新你的编译器了。 ; - )
答案 2 :(得分:1)
对于其他人:
检查您是否真的在#include <random>
中包含了随机变量。我没有它,以前还包含其他一些标头。现在,该标头已更新,并且我收到此错误,并且由于我正在检查编译器设置而暂时找不到它。
答案 3 :(得分:0)
我讨厌推荐这个,但在你的情况下(旧的不可触摸的机器)我可以提出一个建议。随机库的tr1版本应该可用于g ++ - 4.4:
#include <tr1/random>
int main(int argc, char *argv[]){
std::tr1::default_random_engine generator;
return 0;
}
std
版本相对于tr1
版本有所改进,但您应该能够使用大多数<random>
功能。
你甚至不需要C ++ 0x。