' default_random_engine'不是标准

时间:2015-11-02 16:03:34

标签: c++ c++11 gcc

我在这个主题上发现了很多问题,但所有问题似乎与不使用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版本。

有什么想法吗?

4 个答案:

答案 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.0gcc-4.9.2clang-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。