我正在學習C++,我似乎無法找到我的問題的答案。當我運行我的代碼時,我沒有遇到任何編譯器錯誤,但當我調用函數「getVin()」(應該使用「generate()」函數生成一個隨機數)時,它不會執行所以。它輸出一個零。這裏是我的類(來自頭文件):srand功能類
class Vehicle {
public:
Vehicle();
static int generate();
const int getVin() { return m_vin; }
protected:
float m_lla[3];
const int m_vin = s_idgen;
private:
static int s_idgen;
};
和定義(從源文件):
int Vehicle::s_idgen = generate();
Vehicle::Vehicle() {
m_lla[3] = 0;
}
int Vehicle::generate() {
srand((int)time(0));
return (rand() % 10000) + 1;
}
任何意見將是有益的,謝謝!
你應該只調用'srand' *一次*。例如,'time'函數通常以*秒*的形式返回時間,這意味着如果您在一秒內多次調用您的'generate'函數,那麼您將重置種子爲相同的值並獲得相同的「隨機」數字。另外,C++比普通的'srand'和'rand'好得多[僞隨機生成工具](http://en.cppreference.com/w/cpp/numeric/random),我建議你使用它們。 –
想一想:這是什麼時候發生的? 'const int m_vin = s_idgen;'什麼時候s_idgen'被設置? – juanchopanza
不要認爲問題是重複提出的問題:OP問題與重複調用srand無關,而是與靜態變量的初始化順序無關,如@Serge Ballesta anwer。 –