2011-07-11 73 views
0

所以我试图用模板使用Boost.Random mt19937生成器。我的C++有点生疏,但从我的理解(和文档,一如既往Boost,不下于模糊),它应该采用指定它的返回类型(float/double)的模板参数。随模板提升

我现在还不知道问题出在哪里......这一切都与<double><float>一起工作,并停止使用该模板。

下面的代码:

template <class T> 
class SpikingMatrixHelper { 
public: 
    SpikingMatrixHelper(const int seed); 
    T generateNumber(const T, const T) const; 
private: 
    boost::mt19937 gen; 
}; 

template <class T> 
SpikingMatrixHelper<T>::SpikingMatrixHelper(const int seed) : gen(seed) {} 

template <class T> 
T SpikingMatrixHelper<T>::generateNumber(const T min, const T max) const { 
    boost::uniform_real<T> dist(min, max); 
    boost::variate_generator<boost::mt19937&, boost::uniform_real<T> > g(gen, dist); 
    return g(); 
} 

这在variate_generator建设抛出了

/path/ [line] error: no matching function for call to ‘boost::variate_generator<boost::random::mersenne_twister<unsigned int, 32, 624, 397, 31, 2567483615u, 11, 7, 2636928640u, 15, 4022730752u, 18, 3346425566u>&, boost::uniform_real<double> >::variate_generator(const mt19937&, boost::uniform_real<double>&)’ 
/path/ [line] note: candidates are: 
/usr/include/boost/random/variate_generator.hpp:133:3: note: boost::variate_generator<Engine, Distribution>::variate_generator(Engine, Distribution) [with Engine = boost::random::mersenne_twister<unsigned int, 32, 624, 397, 31, 2567483615u, 11, 7, 2636928640u, 15, 4022730752u, 18, 3346425566u>&, Distribution = boost::uniform_real<double>] 
/usr/include/boost/random/variate_generator.hpp:133:3: note: no known conversion for argument 1 from ‘const mt19937 {aka const boost::random::mersenne_twister<unsigned int, 32, 624, 397, 31, 2567483615u, 11, 7, 2636928640u, 15, 4022730752u, 18, 3346425566u>}’ to ‘boost::random::mersenne_twister<unsigned int, 32, 624, 397, 31, 2567483615u, 11, 7, 2636928640u, 15, 4022730752u, 18, 3346425566u>&’ 
/usr/include/boost/random/variate_generator.hpp:114:7: note: boost::variate_generator<boost::random::mersenne_twister<unsigned int, 32, 624, 397, 31, 2567483615u, 11, 7, 2636928640u, 15, 4022730752u, 18, 3346425566u>&, boost::uniform_real<double> >::variate_generator(const boost::variate_generator<boost::random::mersenne_twister<unsigned int, 32, 624, 397, 31, 2567483615u, 11, 7, 2636928640u, 15, 4022730752u, 18, 3346425566u>&, boost::uniform_real<double> >&) 
/usr/include/boost/random/variate_generator.hpp:114:7: note: candidate expects 1 argument, 2 provided 

正如我所说的,它已经有一段时间,因为我已经做了C++和Boost的文档叶很多要求,所以任何提示赞赏...

回答

1

generateNumber不能const - 它置换梅森扭转者。使该mutable,或使功能非const

+0

谢谢,不知怎的,我没有注意到... – TC1

+0

模板编译器错误!=可读的信息 - 容易错过 –