Достаточно простой вопрос.
У меня есть объект Bullet, где в какой-то момент, когда пуля сталкивается с объектом, он уничтожается и удаляется из вектора Bullets.
Каждый объект Bullet имеет ссылку на вектор/список маркеров.
Как удалить его с помощью ключевого слова this внутри класса Bullet, когда это произойдет?
void collide(){
//error C2678: binary '==': no operator found which takes a left-hand operand of type 'Bullet'
//(or there is no acceptable conversion)
bullets->erase(std::remove(bullets->begin(), bullets->end(), *this), bullets->end());
}
Так что да, этот код дает мне странную ошибку. Мне нужно знать, как это сделать, не перебирая вектор пуль с помощью цикла while/for и просто используя векторные функции. Очевидно, что текущий метод не работает, поскольку он выдает ошибку, указанную в коде.
Я также пытался использовать find() вместо remove(), та же ошибка.
operator==
) для классаBullet
? - person Some programmer dude   schedule 26.01.2015std::remove
действительно выполняет итерацию по вектору, так что имейте в виду, что этот подход имеет линейную стоимость в любом случае. - person Kerrek SB   schedule 26.01.2015std::string
s...). Обойти это требование невозможно. - person molbdnilo   schedule 26.01.2015Bullet
не позволяет компилятору генерироватьoperator==
автоматически. Должно быть очевидно, что такие функции, какfind
иremove
, должны иметь возможность проверять, равен лиBullet
тому, который вы находите или удаляете. Поэтому вы должны это реализовать. - person Drew Dormann   schedule 26.01.2015