gpt4 book ai didi

c++ - boost 随机数 - 奇怪的编译错误

转载 作者:行者123 更新时间:2023-11-30 01:29:53 25 4
gpt4 key购买 nike

在我正在编写的模拟中,我有一个类代表必须执行某些操作的代理,并且我希望该代理能够访问随机数生成器。我听说 boost rng 的地方不错,所以我想学习如何使用它们。

所以,问题来了。此代码编译并完美运行:

//Random.cpp
#include <boost/random.hpp>
#include <boost/limits.hpp>
#include <iostream>
#include <ctime>


int main()
{
int N = 10;
boost::lagged_fibonacci607 rng;
rng.seed(static_cast<boost::uint32_t> (std::time(0)));
boost::uniform_real<> uni(0.0,1.0);
boost::variate_generator<boost::lagged_fibonacci607&, boost::uniform_real<> > uniRng(rng, uni);

for (int i = 0; i < N; ++i)
std::cout << uniRng() << std::endl;

return 0;

}

因此,我希望我的 Agent 类能够访问具有以下类型的私有(private)对象:

boost::variate_generator<boost::lagged_fibonacci607&, boost::uniform_real<> > 

当代理需要随机数时可以调用。

所以我尝试做的是:

//RandomAgent.cpp    
#include <boost/random.hpp>
#include <boost/limits.hpp>
#include <iostream>
#include <ctime>

class Agent {
private:
boost::lagged_fibonacci607 rng;
boost::uniform_real<> uni(0.0,1.0);
boost::variate_generator<boost::lagged_fibonacci607&, boost::uniform_real<> > uniRng(rng, uni);

public:
Agent() {
rng.seed(static_cast<boost::uint32_t> (std::time(0)));
}
void show() {
std::cout << uniRng() << std::endl;
}
};


int main() {
Agent foo;
for(int i = 0; i < 10; ++i)
foo.show()
}

我收到以下错误消息:

$ g++ RandomAgent.cpp
Random.cpp:10: error: expected identifier before numeric constant
Random.cpp:10: error: expected ‘,’ or ‘...’ before numeric constant
Random.cpp:11: error: ‘rng’ is not a type
Random.cpp:11: error: ‘uni’ is not a type
Random.cpp: In member function ‘void Agent::show()’:
Random.cpp:18: error: no matching function for call to ‘Agent::uniRng()’
Random.cpp:11: note: candidates are: boost::variate_generator<boost::lagged_fibonacci607&, boost::uniform_real

> 代理::uniRng(int, int)

最佳答案

我认为您需要在构造函数初始化列表中初始化成员变量 uniuniRng,而不是在声明它们的地方内联。

关于c++ - boost 随机数 - 奇怪的编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5261283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com