編集でイディオムを消去、削除: @Holtが私を助けて、解決策はhasCollidedは非静的であればエンジンのインスタンスを渡すことです:C++オブジェクト
std::bind(&Engine::hasCollided, this, ball, _1);
私がtrueを返したかの機能を持っていますレンガがボールに当たったかどうかは間違いです。
ベクトルからヒットしたレンガを消去したいと思います。 単純なベクトルの数とブール関数を使ってイディオムを扱うことができましたが、オブジェクトのベクトルで同じことをしようとすると、私は奇妙なエラーに遭遇します。
プライベートメンバー:
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>)> >]'
それが吐き出すんどのエラー:
あなたは消去を行っていると仮定/
Engine
のメソッド内で削除し、次のことができますか? (しかし、それらの92個全てをコピーしないでください!) – hltおそらく、const参照で引数を渡したいと思うかもしれません。 – Jarod42
'Engine :: hasCollided'は' static'ですか? (そうでない場合は、バインディングに追加する必要はありません)。 – Jarod42