SRAND 在类中的函数

srand function in class

本文关键字:函数 SRAND      更新时间:2023-10-16

我正在学习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;
}

任何建议都会有所帮助,谢谢!

我可以

部分重现,所以我假设你被静态初始化惨败咬了。我刚刚补充了:

Vehicle sveh; // static scoped

紧跟在车辆声明之后,在任何方法或静态字段定义之前,然后

int main() {
    Vehicle veh;
    std::cout << veh.getVin() << std::endl;
    std::cout << sveh.getVin() << std::endl;
    return 0;
}

输出为:

1915
0

这意味着自动Vehicle正确使用随机值(运行随机,但所有实例通用...),而静态值在静态字段初始化之前初始化。

在标题中,您可以:

protected:
  const int m_vin = s_idgen;

在源文件中,您可以执行以下操作:

int Vehicle::s_idgen = generate();

m_vin初始化发生时,s_idgen的值是多少?它还没有被generate()设定.试着把它打印出来,看看我的意思。

尝试直接从函数返回s_idgen


PS:考虑使用 <random> 而不是 C 传统函数。