【发布时间】:2015-10-07 21:17:16
【问题描述】:
我正在尝试使用 boost/random.hpp 生成随机数,我想在初始化时修复种子,并调用 getRandom() 来生成根据种子随机数。但是这段代码不起作用:
class A
{
public:
A()
{
unsigned long seed =12411;
boost::mt19937 rng(seed);
boost::normal_distribution<> norm(0.0, 1.0);
boost::variate_generator<boost::mt19937&,
boost::normal_distribution<> >
randNorm(rng, norm);
randPtr = &randNorm;
//(*randPtr)();
std::cout << (*randPtr)() << std::endl;
}
double getRandom()
{
return (*randPtr)();
}
private:
boost::variate_generator<boost::mt19937&,
boost::normal_distribution<> >*
randPtr;
};
int main() {
A a;
std::cout << a.getRandom() << std::endl;
}
对于上面的代码,它可以编译,会打印一个随机数(在构造函数中调用),然后Segmentation fault: 11。所以指针 randPtr 只在构造函数内部起作用。任何人都可以给我任何建议吗?谢谢!
【问题讨论】:
-
为什么要涉及指针?
-
嗨@Hurkyl,我试图使用 boost::variate_generator 对象作为私有成员,但我无法在 A 的构造函数体内实例化该对象,所以我稍后放弃
-
啊,XY 问题;你应该问另一个关于你原来的问题的问题:当你需要做一些复杂的事情来设置它时,如何初始化一个对象。这有一个值得知道的答案!
-
嗨@Hurkyl,是的,我想知道该怎么做。我采纳了 Tomasz 的建议,让两个对象的寿命更长,现在它起作用了,这是一个很好的解决方案,但考虑到我最初想做的事情,这似乎不是一个聪明的方法......