我的程序无法按预期运行: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
任何人都可以帮我理解这里发生了什么吗?
答案 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;