2015-01-28 1 views
0

은 임 remove_if 벡터에서 쌍을 제거하려고하지만, 메신저 오류C++ 벡터 remove_if 쌍

bool MyClass::isSingleTag(const pair<int,string> & val) { 
    string tag = val.second; 
    int posImg, posBr; 
    posImg = tag.find("<img"); 
    posBr = tag.find("<br"); 
    if (posImg == -1 && posBr == -1) { 
     return false; 
    } else { 
     return true; 
    } 
} 
void MyClass::deleteSingleTags() { 
    vector<pair<int,string>>::iterator last_iter; 
    last_iter = remove_if(allTags.begin(), allTags.end(), &MyClass::isSingleTag); 
    allTags.erase(last_iter, allTags.end()); 
} 

오류지고 다음의 객체없이 http://pastebin.com/1FCWRVDG

+8

무엇을 오류? – OMGtechy

+2

그의 오류는 그가 PTMF를 술어로 전달하려고하고 있다는 것입니다. – Puppy

+1

저는 사지에 나가서 isSingleTag가'static'으로 선언되지 않았으므로'remove_if'에 대한 술어로 작동하지 않을 것이라고 추측합니다. – Wintermute

답변

2

멤버 함수에 대한 포인터가 호출되지 않습니다 함수가 속한 클래스

만들기 isSingleTagstatic - 주소를 가져 오면 일반 함수 포인터가됩니다. 양자 택일로, 그것을 무료 함수로 만드십시오. 처음부터 멤버 함수가 아니기 때문에 (다른 멤버는 액세스하지 않습니다.)? 이제 FUNC 당신이 알고리즘에 전달할 수있는 호출입니다

MyClass obj; 
auto func = std::bind(&MyClass::isSingleTag, obj); 

을 :

(당신은 합법적으로 멤버 함수를해야하는 경우에 대한) 다른 옵션은 std::bind를 사용하여 클래스 개체에 바인딩하는 것입니다 .