ISO C ++禁止声明'uniform_real_distribution',没有类型

时间:2015-05-06 23:05:33

标签: c++

#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:错误:预期';'在'&lt;'之前令牌

但我只想按照http://en.cppreference.com/w/cpp/numeric/random/uniform_real_distribution

中给出的示例进行操作

2 个答案:

答案 0 :(得分:1)

G ++ 4.4.7实现了Technical Report 1's random,而不是C ++ 11的随机。

这意味着没有@Override public String getphone(long name,String address){ String phone= getHibernateTemplate().find("from Table where name=" + name+"AND address='" + address+"'"); return phone; } 类型。

您可以编写如下代码:

std::uniform_real_distribution

虽然我怀疑它有问题,因为它返回的值远大于范围[0,1],这就是我所理解的极限应该是。

答案 1 :(得分:0)

#if defined __GNUC__
  #define GCC_VERSION (__GNUC__ * 10000 \
                           + __GNUC_MINOR__ * 100 \
                           + __GNUC_PATCHLEVEL__)
  #if GCC_VERSION < 40300
    #include <tr1/random>
  #else
    #include <random>
  #endif
#else
  #include <random>
#endif

#include <iostream>
#include <sys/types.h>

typedef std::mt19937                                        generator_t;
typedef std::uniform_real<double>                           distribution_t;
typedef std::variate_generator<generator_t, distribution_t> variate_t;

int main() {
    generator_t sparfun_rand;
    variate_t sparfun_rand_unif(sparfun_rand, distribution_t(0.0,1.0));
    distribution_t dist(0.0, 1.0);
    for (int i = 0; i < 10 ; i++) {
      std::cout << dist(sparfun_rand_unif) << std::endl;
    }
}

使用gcc 4.4.7并使用-std = c ++ 0x标志。