인사말 specials 개체에 std :: sort 알고리즘을 사용하려고합니다. B.cpp멤버 함수에 대한 포인터의 구문 오류
void B::FindClosest(vector<A*> list)
{
bool (B::*ptr)(A*,A*) = &B::Closer;
sort(list.begin(),list.end(),(this->*ptr));
// some use of this sorted list
}
bool B::Closer(A* lhs ,A* rhs)
{
if(Distance(this,lhs)<Distance(this,rhs))
{
return true;
}
else
{
return false;
}
}
그리고 BH의
흥미로운 부분 :
이class B : public A
public:
void FindClosest(vector<A*>);
bool Closer(A*,A*);
이 아주 간단하지만 난 것 같다 나는 나에게 비교를 줄 정렬 목록과 바이너리 기능을 가지고 왜 작동하지 않는지 알 수 없습니다. 그것은 회원 함수에 대한 포인터에서 뭔가 잘못하고있는 것 같지만 무엇을 찾을 수없는 것 같습니다. 나는 사물이 작동하지 아무것도 갈 수있는 다른 방법을 시도했습니다
agglomerate.cpp:32: error: invalid use of non-static member function
: 여기
오류 MSG이다.회원 기능에 대한 포인터에 바인딩되지 않았습니다. 간단하지만 다른 방법이 있다면 환영합니다.
고마워,
Azhrilla
당신은 유형의 두 개체를받을 호출 개체를해야합니다, 당신은sort
세 번째 매개 변수 때문에,이 경우에
std::bind
또는
boost::bind
또는
lambda
를 사용해야합니다 같은 일을 사용할 수 없습니다
try : this-> B :: * ptr – lucasg
'this -> * ptr'은 당신이 생각하는대로하지 않기 때문에 작동하지 않습니다. 'this'를 묶어 정규 함수 포인터를 생성하지 않습니다. 법적 구문이 아닙니다. – StoryTeller
'B' 객체에 대한 참조를 보유하는 펑터 객체가 필요합니다. – StoryTeller