gpt4 book ai didi

c++ - 不使用传递值的函数

转载 作者:行者123 更新时间:2023-11-28 01:49:13 25 4
gpt4 key购买 nike

我有这个程序没有按预期工作: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

谁能帮我理解这里发生了什么?

最佳答案

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

问题在于 vector 初始化。此调用将人员的拷贝放入数组中,而不是实际对象:

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;

关于c++ - 不使用传递值的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43701813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com