編輯: @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