2016-11-07 13 views
0

このコードについて何が間違っていますか?C++ベクトルソート奇数および偶数ステイ

error: reference to non-static member function must be called

とコードがある:

public: 
std::vector<int> sortArray(std::vector<int> array) 
{ 
    std::vector<int> sortedArray(array); 
    std::sort (sortedArray.begin() , sortedArray.end() , oddSort); 
} 

bool oddSort (const int& left , const int& right){ 
    if (left % 2 && right % 2) 
    return left < right; 
    else if (left % 2) 
    return false; 
    else if (right % 2) 
    return true; 
    return left < right; 
} 
+1

'bool oddSort(const int&left、const int&right)'は静的メンバー関数または名前空間スコープまたはグローバル関数でなければなりません – Danh

+0

メンバ関数をメンバ関数として宣言したいのですが、メンバデータを使わないのですか? – Danh

+0

私は、静的にしても、これがあなたが望むことをすることを心から疑う。 1つは、あなたの 'sortArray'関数から何も返さないことです。別の場合、私はあなたのコンパレータでのあなたの前提が、あなたが思っているような要素の動きを妨げるとは思わない。あなたのコンパレータを正しく読み取れば、すべての偶数要素が配列の先頭に積み重ねられます。最後はオッズです。 – WhozCraig

答えて

1

Danhのコメントは正しいですが、これは実際には重複した質問です。しかし、まだ受け入れられた回答と重複はありません。

したがって、問題は、staticでない限り、メンバー関数にthisポインタが必要であるということです。 std::sortthisポインタを提供しません。また、ポインタも必要ありません。したがって、それをstaticにするのは簡単な解決策です。

+0

これは私が書いたものではありませんか? –

+0

@O_Z:もちろんです。レースの状態。 – MSalters

+0

ええ、O_Zあなたは良いと答えましたが、MSaltersの答えはもっと説明しています:) – Asmozan

2

私はエラーがあり、奇数番号を並べ替えるそれでもint型その場所に滞在したい、このための関数を作ったが、compilatorは文句を言わないこの

を渡しますsortはクラスのメソッドではないので、正しいthisポインタを持たないため、メンバ関数の呼び出しが問題になります。

When a non-static class member is used in any of the contexts where the this keyword is allowed (non-static member function bodies, member initializer lists, default member initializers), the implicit this-> is automatically added before the name, resulting in a member access expression (which, if the member is a virtual member function, results in a virtual function call).

http://en.cppreference.com/w/cpp/language/this

0

thisをご覧ください。非静的メンバー関数と静的メンバー関数の種類には違いがあります。そして、私はcppのコンセプトを信じていますCompareは静的なもののようなフォームを必要とします

関連する問題