• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z Vector C++

Object Storage Arubacloud
0 głosów
282 wizyt
pytanie zadane 19 października 2016 w C i C++ przez MasterKiller Nowicjusz (120 p.)

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?

1 odpowiedź

+1 głos
odpowiedź 19 października 2016 przez Michał Muzyka Pasjonat (24,080 p.)
 if(!monsters.empty()) 
{
                    auto it = hero.TryAttack(monsters);
                    if(it != monsters.end())
                    monsters.erase();
}

spróbuj coś takiego

komentarz 19 października 2016 przez MasterKiller Nowicjusz (120 p.)
dzięki, podziałało

Podobne pytania

0 głosów
1 odpowiedź 235 wizyt
pytanie zadane 11 września 2016 w C i C++ przez L33TT12 Gaduła (3,950 p.)
0 głosów
3 odpowiedzi 422 wizyt
0 głosów
1 odpowiedź 419 wizyt
pytanie zadane 19 marca 2019 w C i C++ przez Hiskiel Pasjonat (22,830 p.)

92,556 zapytań

141,404 odpowiedzi

319,562 komentarzy

61,942 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...