【发布时间】:2018-03-22 18:43:09
【问题描述】:
我正在学习 C++,但我似乎找不到我的问题的答案。当我运行我的代码时,我没有得到任何编译器错误,但是当我调用一个函数“getVin()”(应该使用“generate()”函数生成一个随机数)时,它不会所以。它输出一个零。这是我的课程(来自头文件):
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++ 的 pseudo-random generation facilities 比普通的srand和rand好得多,我建议你改用它们。 -
想一想:这种情况什么时候发生?
const int m_vin = s_idgen;s_idgen什么时候设置好? -
不要认为该问题与建议的问题重复:OP 问题与重复调用 srand 无关,而是与静态变量的初始化顺序有关,根据@Serge Ballesta anwer。
标签: c++ oop random static srand