私は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'を* once *と呼ぶべきです。たとえば、 '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のように静的変数の初期化の順序に関係します。 –