C++ ISO C&x2B+;禁止声明';均匀实分布&x27;没有类型 \ifndef\u RNG\H #定义 #包括 类RNG{ 公众: RNG(): _生成器(_默认_种子){} RNG(uint32_t种子): _生成器(种子){} 双运算符(); 私人: 标准:mt19937_发生器; 静态标准:均匀实分布; 静态常量int _default _seed; }; #完

C++ ISO C&x2B+;禁止声明';均匀实分布&x27;没有类型 \ifndef\u RNG\H #定义 #包括 类RNG{ 公众: RNG(): _生成器(_默认_种子){} RNG(uint32_t种子): _生成器(种子){} 双运算符(); 私人: 标准:mt19937_发生器; 静态标准:均匀实分布; 静态常量int _default _seed; }; #完,c++,C++,我试图封装包装类使用的随机数生成器。但在尝试编译上述代码时,我得到以下错误: RNG.H:37:错误:ISO C++禁止声明“MunsixRealPalm分布”,没有类型< /P> rng.h:37:错误:对“:”的使用无效 rng.h:37:错误:应为“;”在“G++4.4.7实现之前,不是C++11的random 这意味着没有std::uniform\u real\u分布类型 您可以编写如下代码: #ifndef _RNG_H #define _RNG_H #include <ra

我试图封装包装类使用的随机数生成器。但在尝试编译上述代码时,我得到以下错误:

RNG.H:37:错误:ISO C++禁止声明“MunsixRealPalm分布”,没有类型< /P> rng.h:37:错误:对“:”的使用无效

rng.h:37:错误:应为“;”在“G++4.4.7实现之前,不是C++11的random

这意味着没有
std::uniform\u real\u分布
类型

您可以编写如下代码:

#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
#包括
#包括
int main(){
std::随机_装置rng;
双x=std::uniform_real()(rng);
printf(“%lf\n”,x);
}
尽管我怀疑它有问题,因为它返回的值远大于范围[0,1],这是我理解的极限应该是什么。

\35;如果定义的话__
#include <random>
#include <iostream>

int main() {
    std::random_device rng;
    double x = std::uniform_real<>()(rng);
    printf("%lf\n", x);
}
#定义GCC_版本(uuu GNUC_uuuu*10000\ +小调\ +__GNUC_补丁级别_) #如果GCC_版本<40300 #包括 #否则 #包括 #恩迪夫 #否则 #包括 #恩迪夫 #包括 #包括 类型定义标准::mt19937发电机; typedef std::均匀实分布; typedef std::变量发生器变量; int main(){ 发电机(sparfun)和发电机(rand); 变量sparfun和unif(sparfun和rand,分布(0.0,1.0)); 分布区(0.0,1.0); 对于(int i=0;i<10;i++){
std::cout无法复制:是否使用
-std=c++11
支持?c(和c++)不要允许用户使用
\u Leading\u underline\u capital
名称;注意
\u RNG\u H
@mariner:您的问题很可能是因为GCC 4.4.7没有完全实现C++11。@BillyONeal:这些标识符并不是完全不允许的。它们是保留给实现的,这使得在您自己的代码中定义它们变得不明确havior。通常,只要标识符没有与任何东西发生冲突,编译器就不会抱怨。底线:将
\u RNG\u H
更改为
RNG\u H
是个好主意,但这不太可能是观察到的错误的原因。@Kieth:我从未打算声称这是观察到的错误的原因(这就是为什么我发表评论而不是回答)
#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;
    }
}