Wpis z mikrobloga

#cpp #programowanie

Mam pytanie, mam dwie klasy:

class Entity
{
string name;
int alive;
int attack;
float defence;
int hp;

public:
void fight(Entity & e);
.
.
.
};

i
class Army
{
vector entities;
string name;

public:
void fight(Army &);
.
.
};

Chcę aby odpowiadające sobie jednostki obu armii się ścierały.
void Army::fight(Army & a)
{
vector ::iterator it;

for(it = a.entities.begin(); it != a.entities.end(); it++)
{
(*this).entities.Entity::fight(*it);
}
}

wyskakuje mi błąd 'Entity' is not a base of 'std::vector'. Posłuży ktoś pomocą?
  • 7
@meho

(*this).entities.Entity::fight(*it);
*this - czyli obiekt klasy army (OK)
.entities - czyli wektor typu Entity, będący polem klasy Army (OK)
.Entity - wektor nie ma takiej metody (NIE OK)

Tutaj pierwsza entity w wektorze walczy z każdą entity z a
this->entities[0].fight(*it)
chcę dokładnie czegoś takiego jak opisał saracenxc . tylko występuje inny błąd przy kompilacji :
[Error] 'class std::vector' has no member named 'fight'

jednak nie, już wszystko działa, dzięki za pomoc ;)
Nigdy nie zrozumiem ludzi, wklejających na forach i innych tego typu platformach, niesformatowany kod, który nie ma prawa się zbudować, nie ze względu na błąd, lecz na celowe okrojenie i niezgodne z językiem komentarze.
Potrzebowałem tylko pomocy w jednej funkcji, więc nie widziałem sensu wklejania całego kodu, który miałby się kompilować. Ale ok, poprawię się na przyszły raz ;)