函数不使用传递的值

时间:2017-04-30 00:44:35

标签: c++ function parameters arguments parameter-passing

我的程序无法按预期运行:https://pastebin.com/7CnUQH95

void percent::setP1Votes(int a, int b, int c, int d, int e, int f, int g, int h, int i, int j) {
    std::cout<< "\n" << a << " " << b << " " << c << " " << d << " " << e << " " << f << " " << h << " " << i << " " << j;
    p1votes = a + b + c + d + e + f + g + h + i + j;
}

report2.setP1Votes(person0.getPrecint1(), person1.getPrecint1(),
                   person2.getPrecint1(), person3.getPrecint1(),
                   person4.getPrecint1(), person5.getPrecint1(),
                   person6.getPrecint1(), person7.getPrecint1(),
                   person8.getPrecint1(), person9.getPrecint1());

以上行为personX.getPrecint1()提供以下值:

120 100 0 250 300 87 284 0 0 0

这就是我希望在上面一行运行时输出到控制台的内容。相反,程序输出:

0 0 0 0 0 0 0 0 0 0

任何人都可以帮我理解这里发生了什么吗?

1 个答案:

答案 0 :(得分:2)

传递给report2.setP1Votes()的值实际上是零。通常这种行为意味着意外的对象复制发生在某处。

问题在于矢量初始化。此调用将人员的副本放在数组中,而不是实际对象:

std::vector<person> people = { person0, person1, person2, person3, person4, person5, person6, person7, person8, person9 };

由于您仅对数组值调用setData(),因此实际的person0, person1, person2,...从未重新初始化,并且自构造以来保持相同的值。

解决方案是使用指针数组:

std::vector< std::unique_ptr<person> > people;