2016-03-29 185 views
-2

我想根據它們的ID對對象列表進行排序。如何根據對象的屬性對對象列表進行排序?

當我創建的對象的Id的列表進行比較的功能,它得到的錯誤:

Severity Code Description Project File Line Suppression State 
Error C3867 'BobControl::compareId': non-standard syntax; use '&' to create a pointer to member list.sort c:\users\wil\documents\visual studio 2015\projects\list.sort\list.sort\source.cpp 32 

此代碼是用來測試的問題。

#include <iostream> 
#include <list> 
#include <string> 
using namespace std; 

class Bob { 
public: 
    Bob::Bob(int id) { 
     _id = id; 
    } 
    int getId() const { return _id; } 


private: 
    int _id = 0; 

};  

//testing lists 
class BobControl { 
public: 

    bool compareId(const Bob& first, const Bob& second) 
    { 
     return (first.getId() < second.getId()); 
    } 
    void testCompar() { 
     bobs.sort(compareId); 
    } 

    void controlBobs() { 
     list<Bob>::iterator lit; 
     bobs.push_back(Bob(0)); 
     bobs.push_back(Bob(1)); 
     bobs.push_back(Bob(5)); 
     bobs.push_back(Bob(3)); 

     testCompar(); 


     for (lit = bobs.begin(); lit != bobs.end(); lit++) { 
      cout << (*lit).getId() << endl; 
     } 
    } 
private: 
    list<Bob> bobs;  
}; 

int main() { 

    BobControl bobc; 

    bobc.controlBobs(); 

    system("PAUSE"); 

    return 0; 
} 
+0

如果要排序對象,請嘗試使用算法排序。這樣就變得簡單了 – AchmadJP

+1

@AchmadJP:'std :: list'有自己的['sort()'](http://en.cppreference.com/w/cpp/container/list/sort)方法。 'std :: sort()'不是比'std :: list :: sort()'更容易使用的。他們都有MichaelAlbers的回答中提到的相同限制。 –

回答

3

您的compareId()需要是靜態函數或獨立函數。列表的sort()方法不接受它可以調用非靜態對象方法的對象。

+0

這工作。謝謝。 –

相關問題