Я пытаюсь стереть значение здоровья врагов, когда они уничтожены, и я получаю сообщение об ошибке "Нет экземпляра перегруженной функции"..."соответствует списку аргументов, если у меня есть следующее:
upgradeHealth.erase(inner)
Кажется, что принимает только что-то вроде этого:
upgradeHealth.erase(upgradeHealth.begin())
Мне нужно, чтобы элемент в позиции внутреннего был удален, чтобы он соответствовал врагу, который только что был уничтожен. Здесь цикл for:
for (outer = 0; outer < bullets.size(); outer++)
{
for (inner = 0; inner < upgrades.size(); inner++)
{
if (upgrades[inner]->HitTest(bullets[outer]))
{
upgradeHealth[inner] -= 1;
bullets.erase(outer--);
multiplier += 0.01;
hasHit = true;
multiplierTime = 0;
cout << upgradeHealth[inner] << endl;
if (upgradeHealth[inner] == 0)
upgradeHealth.erase(inner), upgrades.erase(inner), score += 100 * multiplier;
break;
}
}
}
Есть только две перегруженные функции-члены erase
в классе std::vector
iterator erase(iterator position);
iterator erase(iterator first, iterator last);
Вы можете удалить только итератор, используя методы erase(...)
std::vector
.
Вы можете проверить этот ответ, как получить итератор из индекса. Хотя я бы предложил вам пересмотреть свой алгоритм, чтобы вам не понадобилось такое преобразование.