У меня есть вектор объектов .. монстров. и у меня есть функция «стрелять». Я хочу, чтобы, когда я убил одного из монстров, объект, который нужно удалить. Я пробовал разные способы, но не добился успеха. Вот как я создал объекты:Удалить объект из вектора объектов
void AdaugareMonstru(vector<monstru>& Nmonstru){
int i = 0;
srand(time(0));
int a, b;
for (i; i < 4; i++){
a = (rand() % 5)+1;
b = (rand() % 8)+1;
while (a == 1 && b == 1){
a = (rand() % 5)+1;
b = (rand() % 8)+1;
}
monstru newMonstru(a,b);
Nmonstru.push_back(newMonstru);
}
}
А вот функция, где я нашел монстр перед моим «героем» и я убью его ... или not..cuz я не знаете, как удалить его: D Я думаю, что есть проблема с моим объявлением функции «trage», но я не могу понять это.
void trage(vector<monstru>& monstru, vector< vector<char> > map,int x,int y,int face){
if (face == 1)
{
for (int i = y; i < 10; i++){
if (monstru[0].GetX() == x && monstru[0].GetY() == i){
monstru[0].SetX(0);
monstru[0].SetY(0);
cout << "Ai ucis un monstru" << endl;
}
if (monstru[1].GetX() == x && monstru[0].GetY() == i){
monstru[1].SetX(0);
monstru[1].SetY(0);
cout << "Ai ucis un monstru" << endl;
}
if (monstru[2].GetX() == x && monstru[0].GetY() == i){
monstru[2].SetX(0);
monstru[2].SetY(0);
cout << "Ai ucis un monstru" << endl;
}
if (monstru[3].GetX() == x && monstru[0].GetY() == i){
monstru[3].SetX(0);
monstru[3].SetY(0);
// Instead of setting X and Y to 0 i want to delete the whole object.
monstru.erase(1); // doesn't work... no wonder:D
delete monstru[0]; // doesn't work either.
cout << "Ai ucis un monstru" << endl;
}
}
}
}
Сначала никогда не используйте delete, если вы не использовали новый. Во-вторых, вам нужен итератор для монстра, которого вы хотите стереть, и именно этот итератор вы передаете 'erase()' – NathanOliver
monstru.erase (monstru.begin() + i); должен работать, но вы должны изучить лучшие способы найти монстра перед персонажем. – user4581301
Похоже, что это работает. Я не мог придумать лучшего способа найти то, что находится перед моим персонажем, даже то, что я использовал, хуже ... больнее попробовать. спасибо: D –