为什么除了明显的答案之外还这么说。另外我该如何解决这个问题,我不想在这个项目中添加 c++11 代码。
#include <random>
mingw 4.4(QTSDK 附带的版本,但不使用 QT 库,只是 QT Creator )
该文件需要对即将推出的\ISO C++ 标准C++0x 的编译器和库支持。此支持目前是实验性的,必须使用 -std=c++0x 或 -std=gnu++0x 编译器选项启用。
标<random>
头仅添加到 C++0x 中的 c++ 标准中。如果您尝试<random>
在 C++98 模式下使用,标准库实现者会放入一个预处理器指令来出错,原因有两个:
如果头文件利用了新的 C++0x 语言特性,那么它在默认的 C++98 模式下根本不起作用。那里有 C++0x 错误消息,以便您了解它为什么不起作用,而不必弄清楚“未知关键字”和其他错误消息的汤的含义。
如果头文件不需要任何新的 C++0x 语言特性,那么 C++0x 错误消息就在那里,这样您就不会误以为它在 C++98 中可用。如果您要这样做,然后其他人试图在完全不提供<random>
标头的仅 C++98 编译器上编译您的代码(例如,您打算通过限制自己来支持的旧版本的 GCC C ++ 98),他们会很生气。
标<random>
头仅存在于 C++0x(现在称为 C++11)中。
如果您想在没有新标准的情况下生成随机数,您可以包含<cstdlib>
并使用该rand()
功能。
注意:srand()
如果您使用rand()
,请记住使用独特的东西,比如说当前时间。
另一种选择: use boost
,因为 C++11 标准库主要基于它。切换到boost
是微不足道的,但boost
如果这是一个小项目,可能会太大。
如果你想在 C++11 中工作,你可以使用 Boost 的随机库代替 C++11,尽管它可能不是 1to1 端口,但它们都具有相同的功能并且非常相似。rand
这个解决方案比用 C 的过时函数
重写所有随机位要容易得多,请参见 boost random here
您可以使用随机工具的 TR1 版本,但如果您完全允许使用 C++11,我不会推荐它。进入 C++11 时,TR1 随机工具发生了重大变化。
我可以根据个人经验说,在 gcc (libstdc++) 中,TR1 库处于深度维护模式。只有 std 组件才会受到喜爱。
如果必须使用 C++98
#include <tr1/random>
...
std::tr1::name_of_random_thing(...);
...