Witam, w swoim projekcie jakim jest rogue-like'owy RPG w konsoli używam vectorów do przechowywania polimorficznych wskaźników na potwory. Problem pojawia się przy walce z nimi. Jest funkcja która zwraca iterator potworka, który właśnie został zaatakowany(to, że w razie braku potwora zwraca początek vectora dla testów pominąłem)
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();
}
problem pojawia się przy wywołaniu:
switch (hero.CheckAction())
{
case ATTACK:
{
//delete rat3;
if(!monsters.empty())
monsters.erase(hero.TryAttack(monsters));
test_map.Draw(monsters, NPCs);
break;
}
default: break;
}
gdy CheckAction zwróci ATTACK to program wysypuje się calkowicie, pokazując błąd
rozumiem, że erase zwraca następny element, którego nie ma.. ale to niby jak mam usunąć ten właśnie, jedyny element z wektora?