我正在学习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。 –