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;
}
}