【发布时间】:2015-05-06 23:05:33
【问题描述】:
#ifndef _RNG_H
#define _RNG_H
#include <random>
class RNG {
public:
RNG() :
_generator(_default_seed) { }
RNG(uint32_t seed):
_generator(seed) { }
double operator()();
private:
std::mt19937 _generator;
static std::uniform_real_distribution<> _urd;
static const int _default_seed;
};
#endif // _RNG_H
我正在尝试封装与包装类一起使用的随机数生成器。但是当尝试编译上面的代码时,我得到了以下错误:
rng.h:37: 错误:ISO C++ 禁止声明没有类型的“uniform_real_distribution”
rng.h:37: 错误:'::' 的使用无效
rng.h:37: 错误:预期为 ';'在'之前
但我只是想按照http://en.cppreference.com/w/cpp/numeric/random/uniform_real_distribution 中给出的示例进行操作
【问题讨论】:
-
无法重现:ideone.com/7O6D2M 是否在
-std=c++11支持下编译? -
C(和 C++)不允许用户使用
_Leading_underscore_capital名称;注意_RNG_H -
@mariner:您的问题很可能来自 GCC 4.4.7 没有完全实现 C++11。
-
@BillyONeal:此类标识符并非完全不允许。它们保留给实现,这使得在您自己的代码中定义它们未定义的行为。通常,只要标识符碰巧没有与任何东西发生冲突,编译器就不会抱怨。底线:将
_RNG_H更改为RNG_H是个好主意,但它不太可能是观察到的错误的原因。 -
@Kieth:我从未打算声称这是观察到错误的原因(这就是为什么我将其作为评论而不是答案)
标签: c++