2017-09-30 5 views
-1

いくつかの調査を行った後、私はstd::sortで何が問題になるのかを尋ねました。std :: sortを正しく実行できません

Oliver Charlesworthのアドバイスhereから私は比較を作成しました。アルゴリズムヘッダーを含め、自分の機能にstd::sortという名前を付けました。私はまだエラーが発生しています。おそらく、おそらく見落としですが。

エラー:

エラーC2780のボイドのstd ::ソート(_RanIt、_RanItは) ':2つの引数を期待 - 3が提供

エラーC2672 'のstd ::ソート':見つかりませマッチング、オーバーロード機能

エラー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);     
} 

ここで何が起こっているかわかりません私の頭を傷つけているfまたはビット。私は自分のソート関数を書くことができますが、私はこの方法がより効率的になると確信しています。

+4

それはcomparator' 'のように見えるためには、非静的クラスのメンバ関数です。静的または非メンバーにします。 – VTT

+0

[MCVE](https://stackoverflow.com/help/mcve)を参照してください。 –

+4

十分な情報を提供していません。エラーメッセージから、 'comparator()'はあるクラスの非静的メンバー関数であるようです。コンパレータを3番目の引数として受け入れる 'std :: sort()'の変種は、コンパレータがバイナリ関数(つまり、クラスの静的メンバか、必要な引数を受け入れる非メンバ関数)を必要とします。 – Peter

答えて

0

VTTとPeterが正しく指摘したように、私の比較はクラスのメンバーであったため静的とマークする必要がありました。

詳細については、hereの要件とBinaryPredicatesを参照してください。

ありがとうございました

解決策。 から:

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; 
} 

おかげで再び助け

関連する問題