편집 :C++ 삭제-제거 관용구는
std::bind(&Engine::hasCollided, this, ball, _1);
내가 반환하는 기능이 true 또는 : @Holt 내게 도움이 솔루션은 hasCollided이 아닌 정적 인 경우 엔진의 인스턴스를 전달하는 것입니다 벽돌이 공에 맞았는지 여부.
나는 벡터에서 떨어진 벽돌을 지우고 싶다. 숫자와 bool 함수의 간단한 벡터로 작업하는 관용구를 얻을 수 있었지만 객체의 벡터를 사용해도 이상한 오류가 발생했습니다.
개인 회원 :
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
에 발생합니다
template<typename _Iterator>
bool
operator()(_Iterator __it)
{ return bool(_M_pred(*__it)); }
};
그리고 컴파일러에서 92 개의 오류가 발생합니다. 내가 그
예 오류를 수정 도와주세요 : hasCollided
이후
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