2017-09-30 5 views
-1

일부 연구를 수행 한 후 std::sort과 함께 무엇이 잘못 될지 질문합니다.std :: sort를 올바르게 수행 할 수 없습니다.

올리버 찰스 워스 (Oliver Charlesworth)의 조언에 따르면 here에서 알고리즘 헤더를 포함하여 비교 기능을 만들고 내 기능에 std::sort을 호출했습니다. 나는 여전히 오류가 발생하고 있습니다. 아마 아직도 감시.

오류 :

오류 C2780 무효 표준 : : 정렬 (_RanIt, _RanIt)는 '2 개 인자 예상 - (3)가 제공

오류 C2672'표준 : : 일종의 '발견 일치하는 오버로드 기능

오류 C3867 'ImageEvaluator :: comparator': 비표준 구문; 사용 '&'멤버에 대한 포인터를 만들 수

구조체 :

struct numLocWidth 
{ 
    int width; 
    int number; 
    int location; 
}; 

비교 :

bool comparator(const numLocWidth &a, const numLocWidth &b) 
{ 
    return a.location < b.location; 
} 

기능 :

if (tempMax > minAcceptableValue) 
{ 
    tempLocAndVal.location = max_Pot_Loc.x; 
    tempLocAndVal.number = i - 1; 
    tempLocAndVal.width = templates[7][i].size().width; 
    foundNumbers.push_back(tempLocAndVal); 
    std::sort(foundNumbers.begin(), foundNumbers.end(), comparator);     
} 

여기에 무슨 일이 일어나고 있는지 확실하지 내 머리를 긁적 거리다. 또는 조금. 내 자신의 정렬 함수를 작성할 수 있지만이 방법이 더 효율적일 것이라고 확신합니다.

+4

그것은 comparator''모양에 대한 비 정적 클래스 멤버 함수이다. 정적 또는 비회원으로 만듭니다. – VTT

+0

[MCVE] (https://stackoverflow.com/help/mcve)를 참조하십시오. –

+4

충분한 정보를 제공하지 않았습니다. 오류 메시지에서'comparator()'가 어떤 클래스의 비 정적 멤버 함수 인 것처럼 보입니다. 비교기를 세 번째 인수로 받아들이는'std :: sort()'의 변형은 이진 함수 (즉, 클래스의 정적 멤버 또는 필수 인수를 허용하는 비 멤버 함수)를 필요로합니다. – Peter

답변

0

VTT와 Peter가 올바르게 지적했듯이 내 비교는 클래스의 멤버 였기 때문에 정적이라고 표시해야했습니다.

자세한 내용은 요구 사항 및 BinaryPredicates에서 here을 참조하십시오.

감사합니다.

해결책. 에서 :

bool comparator(const numLocWidth &a, const numLocWidth &b) 
{ 
    return a.location < b.location; 
} 

사람 :

static bool comparator(const numLocWidth &a, const numLocWidth &b) 
{ 
    return a.location < b.location; 
} 

다시 한번 감사 도움

관련 문제