我是一個C++初學者,我有一個C++ 0x隨機數生成器的問題。我想用梅森捻線機引擎產生隨機數的int64_t,我使用了一些資料,我發現較早寫了一個函數:C++ 0x random_device'std :: runtime_error'
#include <stdint.h>
#include <random>
int64_t MyRandomClass::generateInt64_t(int64_t minValue, int64_t maxValue)
{
std::random_device rd;
std::default_random_engine e(rd());
unsigned char arr[8];
for(unsigned int i = 0; i < sizeof(arr); i++)
{
arr[i] = (unsigned char)e();
}
int64_t number = static_cast<int64_t>(arr[0]) | static_cast<int64_t>(arr[1]) << 8 | static_cast<int64_t>(arr[2]) << 16 | static_cast<int64_t>(arr[3]) << 24 | static_cast<int64_t>(arr[4]) << 32 | static_cast<int64_t>(arr[5]) << 40 | static_cast<int64_t>(arr[6]) << 48 | static_cast<int64_t>(arr[7]) << 56;
return (std::abs(number % (maxValue - minValue)) + minValue);
}
當我試圖在Qt應用程序使用此代碼,我收到此錯誤:
terminate called after throwing an instance of 'std::runtime_error'
what(): random_device::random_device(const std::string&)
正如我以前說過,我不是很熟悉C++,但它看起來像我不得不指定一個const std::string
值。我試過這個:
const std::string s = "s";
std::random_device rd(s);
但它會導致相同的錯誤。我怎樣才能避免它?
我在Windows平臺上使用MinGW 4.7 32位編譯器和Desktop Qt 5.0.1。我還在.pro文件中寫入QMAKE_CXXFLAGS += -std=c++0x
。
請每次詢問隨機數時停止創建隨機引擎。創建一個作爲對象的成員,並要求它提供一個新的隨機數。 –