Cześć, tak jak w tytule mam problem z użyciem metody erase() na mojej tablicy. Chodzi o to aby po spełnieniu warunku, w tym wypadku wyjściu pocisku poza teksturę mapy, usuwało z kontenera owy pocisk, ale za nic na świecie program nie chce się skompilować, a mógłbym przysiąc, że z rok temu jeszcze to działało. Więcej kodu niż ten wycinek nie potrzeba, ponieważ problem leży tylko i wyłącznie tutaj..
std::vector<Bullet> bullets;
Tutaj dodaję do tablicy nowe obiekty:
Bullet bullet(400);
if (player->isAttacking()) {
bullet.setPosition(playerCenter);
bullet.setVelocity(aimDirectionNormalize);
bullets.push_back(bullet);
}
A tutaj w warunku występuje błąd:
for (int i = 0; i < bullets.size(); i++)
{
sf::Vector2u gametextureSize = gameTexture->getSize();
sf::Vector2f bulletPosition = bullets[i].getPosition();
if (bulletPosition.x < 0 || bulletPosition.x > gametextureSize.x ||
bulletPosition.y < 0 || bulletPosition.y > gametextureSize.y)
bullets.erase(bullets.begin() + i);
}
Już z dwie godziny spędziłem na zagranicznych forach żeby znaleźć rozwiązanie, ale nie za bardzo rozumiem. Bo z tego co się dowiedziałem to muszę posłużyć się iteratorem. No ok, tylko że jak potem mam się za jego pomocą odwołać do metod moich obiektów klasy Bullet? Oczywiście jeśli dobrze rozumuję, ale chciałbym aby mi to ktoś lepiej objaśnił.
A i zapomniałbym. Oto błąd:
Błąd C2280 „Bullet &Bullet::operator =(const Bullet &)”: próba odwania do usuniętej funkcji.
Pozdrawiam
żółwibekon