0

为什么除了明显的答案之外还这么说。另外我该如何解决这个问题,我不想在这个项目中添加 c++11 代码。

#include <random>

mingw 4.4(QTSDK 附带的版本,但不使用 QT 库,只是 QT Creator )

该文件需要对即将推出的\ISO C++ 标准C++0x 的编译器和库支持。此支持目前是实验性的,必须使用 -std=c++0x 或 -std=gnu++0x 编译器选项启用。

4

4 回答 4

6

<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),他们会很生气。

于 2012-10-22T22:37:24.197 回答
5

<random>头仅存在于 C++0x(现在称为 C++11)中。

如果您想在没有新标准的情况下生成随机数,您可以包含<cstdlib>并使用该rand()功能。

注意:srand()如果您使用rand(),请记住使用独特的东西,比如说当前时间。

另一种选择: use boost,因为 C++11 标准库主要基于它。切换到boost是微不足道的,但boost如果这是一个小项目,可能会太大。

于 2012-10-22T22:31:25.163 回答
1

如果你想在 C++11 中工作,你可以使用 Boost 的随机库代替 C++11,尽管它可能不是 1to1 端口,但它们都具有相同的功能并且非常相似。rand这个解决方案比用 C 的过时函数 重写所有随机位要容易得多,请参见 boost random here

于 2012-10-22T22:33:51.840 回答
0

您可以使用随机工具的 TR1 版本,但如果您完全允许使用 C++11,我不会推荐它。进入 C++11 时,TR1 随机工具发生了重大变化。

我可以根据个人经验说,在 gcc (libstdc++) 中,TR1 库处于深度维护模式。只有 std 组件才会受到喜爱。

如果必须使用 C++98

#include <tr1/random>
...
   std::tr1::name_of_random_thing(...);
...
于 2012-10-23T02:56:10.077 回答