在我正在寫的一個模擬中,我有一個代表必須採取某些操作的代理的類,並且我希望此代理可以訪問隨機數生成器。我聽到了提升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;
}
,我希望我的代理類,以便獲得具有類型的私有對象:
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)
哦......當然! !該死的。在我發佈之前,我應該閱讀我的代碼。 :P – 2011-03-10 14:54:16