gpt4 book ai didi

c++ - remove_if : Predicate error when passing a function returning bool

转载 作者:太空宇宙 更新时间:2023-11-04 16:03:29 24 4
gpt4 key购买 nike

我有这个预定义函数。

void attack(std::vector<GameObject*> objects, unsigned damage) {


for (GameObject* object : objects) {
object->takeDamage(damage);
auto isDead = object->isDead();
objects.erase(std::remove_if(objects.begin(),objects.end(),isDead), objects.end());
}
}

这是我的 isDead 函数

bool isDead() const { 
if (destructed) {
std::cout << "memory error" << std::endl;
}

return life <= 0;
}

这是我不断收到的错误。已经尝试了很多东西,但根本无法弄清楚这一点。任何帮助表示赞赏!

错误:表达式不能用作函数 { 返回 bool 值(_M_pred(*__it));

最佳答案

  1. isDead 是函数中的一个变量。您不能将它用作 remove_if 的参数。

  2. 您也不能使用常规成员函数作为 std::remove_if 的参数。请改用 lambda 函数。

  3. 在使用范围 for 循环遍历容器时,不要从容器中删除对象。

  4. 将参数更改为attack 作为引用。否则,您将从拷贝中移除对象,而不是原始容器。

这是 attack 的更新版本:

void attack(std::vector<GameObject*>& objects, unsigned damage)
{
for (GameObject* object : objects)
{
object->takeDamage(damage);
}

objects.erase(std::remove_if(objects.begin(),objects.end(), [](GameObject* object){return object->isDead();}), objects.end());
}

关于c++ - remove_if : Predicate error when passing a function returning bool,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39495988/

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