编辑: @Holt帮我,解决的办法是,如果hasCollided是非静态的传递引擎的实例:C++擦除remove惯用法
std::bind(&Engine::hasCollided, this, ball, _1);
我有它返回一个函数真或虚假砖块是否被球击中。
我想擦掉一个从矢量中击中的砖。 我设法使用简单的数字和布尔函数向量来处理成语,但是当我尝试使用对象的向量时,我得到了奇怪的错误。
私有成员:
Ball ball;
std::vector<Brick> bricks;
碰撞检查:
bool Engine::hasCollided(Ball& object1, Brick& object2)
{
//do some checks
return 1;
}
我尝试:
using namespace std::placeholders;
auto f = std::bind(hasCollided, ball, _1);
bricks.erase(std::remove_if(bricks.begin(), bricks.end(), f), bricks.end());
错误发生在predefined_ops.h
就在这里:
编译器吐出92个错误。请帮我解决这个问题
实例错误:
required from '_ForwardIterator std::__remove_if(_ForwardIterator, _ForwardIterator, _Predicate) [with _ForwardIterator = __gnu_cxx::__normal_iterator<Game::Brick*, std::vector<Game::Brick> >; _Predicate = __gnu_cxx::__ops::_Iter_pred<std::_Bind<std::_Mem_fn<bool (Game::Engine::*)(Game::Ball&, Game::Brick&)>(Game::Ball, std::_Placeholder<1>)> >]'
它吐了哪些错误呢? (请不要复制它们全部92个,但!) – hlt
您可能想通过const引用传递参数。 – Jarod42
'Engine :: hasCollided'' static'? (如果不是,你必须将其添加到绑定中)。 – Jarod42