我发现了很多关于这个主题的问题,但所有问题似乎与不使用C++ 11进行编译有关.我的代码是
#include <random>
int main(int argc, char *argv[]){
std::default_random_engine generator;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
即使我编译
gcc -std=c++0x testmain.cpp
Run Code Online (Sandbox Code Playgroud)
给出default_random_engine不是std成员的错误.该程序是在远程机器上编译的,我不是自己编写的
gcc -v
Run Code Online (Sandbox Code Playgroud)
产生4.4.7的版本.
有任何想法吗?
对于其他人:
检查您是否确实包含 random #include <random>。我没有它,之前有其他一些标头包含它。现在标头已更新,我收到此错误,但有一段时间没有找到它,因为我正在检查编译器设置。
正如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
Run Code Online (Sandbox Code Playgroud)
您的代码工作正常,我在:gcc-5.1.0,gcc-4.9.2和clang-3.7.0,
另外你应该使用command:g ++而不是gcc,所以默认情况下gcc链接到正确的c ++库.