2014-06-12 87 views
1

我想通過傳遞第一個和最後一個項目並傳遞一個布爾謂詞來排序向量。不能爲我的生活弄清楚我做錯了什麼。懷疑它對課程缺乏瞭解。但它真的讓我難住。排序不喜歡我的謂詞

我正在通過加速的C++,並在第4章。我在閱讀時花了一段時間,但沒有到任何地方。可能不幫助我,我在課堂上做事情,所以我可以並排保留章節。

我得到的錯誤是

error C2064: term does not evaluate to a function taking 2 arguments 

上調用排序行。所以在一個頭文件(Ch4)中,我有以下內容(爲了您的理智,我編輯了這些代碼 - 包含內容等似乎很高興 - 頭文件和代碼位於單獨的文件中,並且正在使用vs2013,因此它的排序全部這爲我)

class Ch4 
{ 
public: 
    int Ch4::Run(); 
    struct Student_Info; 
    bool compare(const Student_Info& x, const Student_Info& y); 
} 

然後在類:

struct Ch4::Student_Info 
{ 
    string name; 
    double midterm, final; 
    vector<double> homework; 
}; 

int Ch4::Run() 
{ 
    vector<Student_Info> students; 
    ... code that populates it 
    sort(students.begin(), students.end(), compare); 
} 

bool Ch4::compare(const Student_Info& x, const Student_Info& y) 
{ 
    return x.name < y.name; 
} 

當我把上面一行

sort(students.begin(), students.end(), Ch4::compare); 

我收到一個錯誤,說它缺少一個參數列表 - 但在我的重載列表中沒有顯示一個參數列表。

所以我按照它的意見,並將其用作參考,我回到原來的錯誤信息。

所以我感到困惑的兩兩件事: 1)爲什麼我的代碼工作 - 如何解決 2)什麼是這些錯誤消息告訴我,爲什麼他們似乎談論沒有按」過載存在還是對我隱藏?

+0

申報比較功能爲靜態。 –

+0

它必須是* functor * - 或者是一個函數指針,一個lambda或者一個重載'operator()'的類型。 –

回答

1

compare是一個非靜態方法

讓它static

static bool compare(const Student_Info& x, const Student_Info& y); 
1

問題是您的compare函數是非靜態的。您可能需要將其設置爲一個自由函數,否則將其設置爲靜態。