gpt4 book ai didi

C++ - Vector 中的对象无法修改

转载 作者:太空狗 更新时间:2023-10-29 21:35:29 25 4
gpt4 key购买 nike

我正在尝试创建一个存储 Chest vector 的类,其中 Chest 是我创建的自定义类。以下是 ItemManager.h 的相关部分:

class ItemManager
{
public:
...
void GenerateItems(sf::Vector2u currentPos);
void CheckCollisions(Collider& collider);
...

private:
std::vector<Chest> chests;
};

然后这里是(相关部分)ItemManager.cpp:

void ItemManager::GenerateItems(sf::Vector2u currentPos)
{
if (rand() % 50 == 0)
chests.push_back(Chest(sf::Vector2f(16 * currentPos.x + 1, 16 * currentPos.y - 4 - 2)));
}

void ItemManager::CheckCollisions(Collider & collider)
{
for (Chest chest : chests)
if (collider.CheckCollision(chest.getCollider(), 1.0f))
chest.OnInteract();
}

我现在遇到的问题是,即使在 CheckCollisions() 中调用 chest.OnInteract() 时,胸部也没有任何反应。然而,这不是该方法的问题,因为当我在方法 GenerateItems() 中调用 chest.OnInteract() 时,它会将预期的内容应用于胸部。我的信念是,因为我在另一种方法中创建了一个局部变量来添加 vector,所以添加的对象超出了范围,我无法再引用它。然而,我相信添加到 vector 会创建一个拷贝,因此这应该不是问题。任何帮助表示赞赏。

编辑
这是我的 OnInteract() 方法:

void Chest::OnInteract()
{
open = true;
chest.setSize(sf::Vector2f(14, 16));
chest.move(sf::Vector2f(0, -2));
chest.setTextureRect(sf::IntRect(14, 0, 14, 16));
}

其中openchestChest的成员变量。

最佳答案

你的循环:

for (Chest chest : chests) { ... }

将生成 Chest 对象的临时拷贝,因此将对该临时对象调用 OnInteract() 方法。相反,您想要的是对该对象的引用,如下所示:

for (Chest &chest : chests) { ... }

以便将更改(大概发生在 OnInteract() 方法中)应用于 chests 容器内的对象,而不是它们的临时拷贝。

关于C++ - Vector 中的对象无法修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42240288/

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