2015-08-28 126 views
0

我試圖做一個隨機數發生器,產生0和999隨機數生成C++在CMD

我做最初運行它從何處時間生成mt19937種子(之間的數字錯誤null),但發現這會導致該數字每秒更改一次,並且速度不夠快,因爲當我從for循環中再次調用它時。我使用code :: blocks來編譯我的代碼,它編譯時沒有錯誤,但是當我運行代碼時,我在cmd中發生錯誤。

Error: terminate called after throwing an instance of 'std::runtime_error' 
    what(): random_device::random_device(const std::string&) 

我在做可怕的錯誤嗎?

#include <iostream> 
#include <random> 

using namespace std; 

//Random Number Generator 
int numGen() { 

    //Random Number Generator 
    random_device rd; 
    mt19937 mt(rd()); 
    uniform_int_distribution<int> dist(0, 999); 

    for (int I = 0; I < 6; i++) { 
     cout <<dist(mt) << " "; 
    } 

    cout <<endl; 
} 

UPDATE:

我現在已經運行從Visual Studio完全相同的代碼,並沒有錯誤。

+0

我已經簽了一個網站,編譯並執行你的代碼,它運行沒有問題 – user3341479

+0

代碼::塊是用C++ 11 以下選項兼容也被激活: 「有G ++遵循C + +11 ISO C++語言標準[-std = C++ 11]「 – user3341479

+1

爲什麼你每次都重播? – RyanP

回答

0

你的函數永遠不會返回一個值。既然你有一個int返回類型,你的函數必須返回一個可轉換爲int的東西。如果您不想返回任何內容,可以將您的功能更改爲void

由於您的異常引用了構造函數名稱,因此它顯示無法創建隨機設備。在C++ 14標準26.5.6.4具有

拋出:從異常衍生如果random_device 不能被初始化的實現定義類型的值。

+0

問題依然存在。 – user3341479

1

std::random_device實際上並不需要實施。

http://www.cplusplus.com/reference/random/random_device/

第3段。如果設備不好,他們會拋出異常。嘗試使用不同的種子RNG。

+0

我試過mt19937(time(NULL));但是這隻會每秒更新一次。這並不快。 然後我可以找到一種方法來生成的唯一方法是強制for循環每秒鐘打勾一次。 – user3341479

+0

你只種一次rng。 – twentylemon