【发布时间】:2015-01-26 08:39:44
【问题描述】:
相当简单的问题。
我有一个 Bullet 对象,当子弹与对象发生碰撞时,它会被销毁并从 Bullets 向量中移除。
每个 Bullet 对象都有一个对向量/子弹列表的引用。
发生这种情况时,如何在 Bullet 类中使用 this 关键字将其删除?
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(),同样的错误。
【问题讨论】:
-
Bullet类是否有相等运算符(即operator==)? -
错误信息再清楚不过了。而
std::remove确实遍历了向量,所以要注意这种方法无论如何都有线性成本。 -
我没有,但我真的可以使用解决方案。我在这里看到了其他不需要实现 operator== 的示例,但他们仍然使用这种方法。老实说,我该如何从向量中删除一个元素(this)?
-
您应该实现
operator==或尝试使用 std::remove_if 和 lambda 进行比较。例如:stackoverflow.com/questions/24086717/… -
@JoeBid 这些示例使用了一个向量,该向量具有相等运算符(整数、指针、
std::strings...)。没有办法绕过这个要求。