在课堂上的功能

时间:2017-10-11 07:29:38

标签: c++ oop random static srand

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

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

2 个答案:

答案 0 :(得分: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正确使用随机值(对于运行是随机的,但对所有实例都是通用的......),而在静态字段初始化之前初始化静态值。

答案 1 :(得分:0)

在标题中,您可以:

protected:
  const int m_vin = s_idgen;

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

int Vehicle::s_idgen = generate();

m_vin的初始化发生时,s_idgen的值是多少?它尚未由generate()设置。尝试打印出来,看看我的意思。

尝试直接从您的函数返回s_idgen

PS:考虑使用<random>而不是C-traditional功能。