4

私は C++ の初心者で、C++0x 乱数ジェネレーターに問題があります。ランダムな int64_t 数値を生成するためにメルセンヌ ツイスター エンジンを使用したかったので、以前に見つけた情報を使用して関数を作成しました。

#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 を使用しています。QMAKE_CXXFLAGS += -std=c++0x.pro ファイルにも書きました。

4

1 に答える 1