嗨,在我的项目中,roguelike RPG使用向量来保持多态指标到所有怪物,抽象类Mob的一部分。问题是在战斗期间 - 有一个函数返回迭代器选择我们正在攻击的nob(我跳过测试,如果这里没有怪物,它返回向量的开始)。
vector<Mob*>::iterator Hero::TryAttack(vector <Mob*> monsters)
{
int trying_x = pos_x, trying_y = pos_y;
switch (DIR)
{
case UP: trying_y--;
case DOWN: trying_y++;
case LEFT: trying_x--;
case RIGHT: trying_x++;
}
if (!monsters.empty())
{
for (vector <Mob*>::iterator i = monsters.begin(); i != monsters.end(); i++)
{
if ((*i)->pos_x == trying_x && (*i)->pos_y == trying_y)
{
return i;
}
}
}
return monsters.begin();
}
当我在这里调用该函数时:
switch (hero.CheckAction())
{
case ATTACK:
{
//delete rat3;
if(!monsters.empty())
monsters.erase(hero.TryAttack(monsters));
test_map.Draw(monsters, NPCs);
break;
}
default: break;
}
弹出的断言失败: img
我知道擦除后会删除下一个元素但是如何删除vector中只有一个现有元素?
答案 0 :(得分:0)
restart service
您按值传递Hero::TryAttack(vector <Mob*> monsters)
。返回的迭代器是指向量的不存在的副本。通过引用传递:
monsters