我试图迭代一个对象向量并执行一个简单的更新函数,每次将对象向右移动1个像素。但是,当我运行代码时,x值只会更改一次。
在source.cpp中:
import Alamofire
Alamofire.request("https://google.com").responseString(queue: queue) { response in
print("\(response.result.isSuccess)")
}
In person.cpp
for (int i = 0; i < Screen::SCREEN_WIDTH * Screen::SCREEN_HEIGHT; i++) {
people.push_back(Person());
}
for (int i = 0; i < 1; i++) {
people[i].isAlive = true;
}
while(true) {
for (Person p : people) {
if (p.isAlive == true) {
p.Update(p);
cout << p.x << endl;
screen.setPixel(p.x, p.y, 255, 0, 0);
}
else {
screen.setPixel(p.x, p.y, 0, 0, 0);
}
}
}
}
正如你所看到的,我从数组中选择一个人并将它们设置为活着,然后绘制。它们是每帧绘制的,但不会更新。任何人都可以帮我解决这个问题吗?
答案 0 :(得分:4)
for (Person p : people)
创建向量的每个元素的副本,然后修改对向量中的原始对象没有影响的副本。你想要的是for (Person& p : people)
。
顺便说一下:除非确实需要立即清除输出,否则应避免使用endl
。相反,在大多数情况下,您应该只输出'\n'
。
答案 1 :(得分:2)
在此声明中:
for (Person p : people) {
...
}
你在p对象中制作副本,更改它,最后将其销毁
为了保留您的更改,请执行以下操作:
for (Person &p : people) {
...
}
答案 2 :(得分:1)
如果您想要修改循环中的Person
,则需要使用引用 - 否则您将使用vector
中的任何内容的副本然后被丢弃。
for (Person p : people) {
需要
for (Person& p : people) {