2016-03-29 2 views
-2

Я пытаюсь сортировать список объектов на основе их идентификаторов.Как отсортировать список объектов на основе их свойств?

Когда я создаю функцию, которая сравнивает идентификатор для объектов в списке, он получает ошибку:

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()'. И оба они имеют такое же ограничение, упомянутое в ответе Майкла Альберса. –

ответ

3

Ваши compareId() потребности быть статической функцией или автономной функцией. Метод sort() списка не принимает объект, по которому он может вызвать метод нестатического объекта.

+0

Это сработало. Благодарю. –

Смежные вопросы