سؤال

أحاول إنشاء عدد صحيح عشوائي 64 بت غير موقّع باستخدام Boost Random ، لكنني أحصل على فشل في التأكيد مع Uniform_int.

struct timeval tv;
boost::mt19937 randGen(tval.tv_usec);
boost::uniform_int<> uInt64Dist(0, std::numeric_limits<uint64_t>::max());
boost::variate_generator<boost::mt19937&, boost::uniform_int<> > getRand(randGen, uInt64Dist);
uint64_t clock_seq_= getRand();

هنا هو ما يحصل على الإخراج في السطر 3.

main:/usr/include/boost/random/uniform_int.hpp:48: boost::uniform_int<IntType>::uniform_int(IntType, IntType) [with IntType = int]: Assertion `min_arg <= max_arg' failed.

تحرير: بناءً على إجاباتك ، حاولت تحديد الحجم مع أدناه:

boost:uniform_int<uint64_t> ....

لكنني أحصل على خطأ التجميع التالي:

spec.cpp: In member function ‘void Specifier::initialize()’:
spec.cpp:58: error: no matching function for call to ‘boost::variate_generator<boost::mt19937&, boost::uniform_int<int> >::variate_generator(boost::mt19937&, boost::uniform_int<long unsigned int>&)’
/usr/include/boost/random/variate_generator.hpp:97: note: candidates are: boost::variate_generator<Engine, Distribution>::variate_generator(Engine, Distribution) [with Engine = boost::mt19937&, Distribution = boost::uniform_int<int>]
/usr/include/boost/random/variate_generator.hpp:87: note:                 boost::variate_generator<boost::mt19937&, boost::uniform_int<int> >::variate_generator(const boost::variate_generator<boost::mt19937&, boost::uniform_int<int> >&)
make: *** [spec.o] Error 1

تحرير: حسنًا ، غاب عن المثيل الثاني من Boost :: uniform_int. بمجرد أن حصلت على كل منهما ، كل شيء يذهب.

هل كانت مفيدة؟

المحلول

uniform_int الإعدادات الافتراضية ل int كنوع القيمة. استخدم ما يلي بدلاً من ذلك:

boost::uniform_int<uint64_t> ...

الشيء نفسه ينطبق على السطر التالي:

boost::variate_generator<boost::mt19937&, boost::uniform_int<uint64_t> > ...

نصائح أخرى

تحتاج إلى تحديد في إعلانك boost::uniform_int<> أنك تستخدم نوع عدد صحيح 64 بت. وإلا فإنه الإعدادات الافتراضية إلى نوع 32 بت.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top