继承我之前已经解决的问题: Issue with Pointers (Only in Release Build)
在对我创造敌人的方式进行必要的更改后,我还必须改变其他物体与敌人的交互方式,原因很明显。 现在,似乎我再次做错了:/
在这里,我有一些代码可以用来制造击中敌人的射弹,但这个代码反过来并在短时间内阻挡了敌人。
if ((enemies[numOfEnemies].position.x + (enemies[numOfEnemies].width / 2) > bullet.position.x &&
enemies[numOfEnemies].position.x < bullet.position.x + bullet.width) &&
(enemies[numOfEnemies].position.y + (enemies[numOfEnemies].height / 2) > bullet.position.y &&
enemies[numOfEnemies].position.y < bullet.position.y + bullet.height) &&
enemies[numOfEnemies].speed != 0)
{
//We've collided with the wall, stop the enemy
enemies[numOfEnemies].previousSpeed = enemies[numOfEnemies].speed;
enemies[numOfEnemies].speed = 0;
}
正如你所看到的,简单的东西。但似乎敌人矢量一直在被重置,不确定这里发生了什么。之前,再次工作得非常好,从指针到向量的变化现在已经创建了这个问题:/。
void Towers::Update(std::vector<Enemies> enemies, SDLib& lib, Map cMap)
这就是我如何将向量传递给我的函数。向量是否超出范围然后自动清除?如果是,那么我需要做什么来分配我对实际数据所做的更改?
任何帮助表示赞赏!
答案 0 :(得分:3)
除非另有说明,否则C ++函数参数是按值传递。这意味着您的函数在向量的副本上运行。要让它修改原文,您需要通过引用传递:
void Towers::Update(std::vector<Enemies> &enemies, SDLib& lib, Map cMap)
^
答案 1 :(得分:1)
您正在按值传递std :: vector ,这意味着每次传递给函数时都会复制它(包括其内容)。如果您希望Update()函数能够更改向量(内容),则需要通过引用传递:
void Towers::Update(std::vector<Enemies> &enemies, SDLib& lib, Map cMap)
其余代码很可能保持不变,因为引用 - 而不是指针 - 不需要显式解除引用。
答案 2 :(得分:1)
您通过值将向量传递给函数。因此,调用函数中的原始向量将永远不会被修改。试试这个显示问题的代码:
#include <vector>
#include <iostream>
int domod(std::vector<int>& v) {
v[0] = 2;
}
int donotmod(std::vector<int> v) {
v[0] = 2;
}
int main(void) {
std::vector<int> v;
v.push_back(1);
donotmod(v);
std::cout << v[0] << std::endl;
domod(v);
std::cout << v[0] << std::endl;
return 0;
}