2015-11-09 4 views
0

у меня есть:Сортировка вектор QPointers

std::vector< QPointer<ToDoItem> > items; 

и вызов для сортировки:

std::sort(items.begin(), items.end(), custComparFunction) 

Я использую функцию сортировки обычай:

bool ToDoList::custComparFunc(QPointer<ToDoItem> i1, QPointer<ToDoItem> i2){ 
    if (i1.data()->getSecsTillDeadline() == i2.data()->getSecsTillDeadline()){ 
     return i1.data()->getMainText() < i2.data()->getMainText(); 
    } 
    return i1.data()->getSecsTillDeadline() < i2.data()->getSecsTillDeadline(); 
} 

Я пытаюсь сортировать вектор QPointers на основе значения, возвращаемого функцией getSecsTillDeadline()

но я получаю сообщение об ошибке «должен использовать». * 'Или' -> * 'для вызова указателя на функцию-член.

, где я иду не так? ошибка в файл predefined_ops.h, так что я бы себе представить, что есть что-то в моем собственном коде я могу изменить, чтобы сделать эту работу

полной ошибки:

C:\Qt\Tools\mingw492_32\i686-w64-mingw32\include\c++\bits\predefined_ops.h:121: error: must use '.*' or '->*' to call pointer-to-member function in '((__gnu_cxx::__ops::_Iter_comp_iter<bool (ToDoList::*)(QPointer<ToDoItem>, QPointer<ToDoItem>)>*)this)->__gnu_cxx::__ops::_Iter_comp_iter<bool (ToDoList::*)(QPointer<ToDoItem>, QPointer<ToDoItem>)>::_M_comp (...)', e.g. '(... ->* ((__gnu_cxx::__ops::_Iter_comp_iter<bool (ToDoList::*)(QPointer<ToDoItem>, QPointer<ToDoItem>)>*)this)->__gnu_cxx::__ops::_Iter_comp_iter<bool (ToDoList::*)(QPointer<ToDoItem>, QPointer<ToDoItem>)>::_M_comp) (...)' 
    { return bool(_M_comp(*__it1, *__it2)); } 
             ^
+1

'Qpointer' имеет перегруженный' operator -> '- вам не нужна часть' .data() '. – molbdnilo

+0

На какой строке вы видите ошибку? Разве это компилятор говорит, что больше ничего нет? И 'item' или' ToDoItem'? –

+0

Является ли 'getSecsTillDeadline' или' getMainText' указателем на функцию-член? – molbdnilo

ответ

0

кажется формирует сообщение об ошибке что custComparFunction является нестатической функцией-членом в классе ToDoItem. Вы не можете использовать нестатические функции-члены, например, «обычные» указатели на функции, не являющиеся членами.

Самое простое решение состоит в том, чтобы сделать функцию static функцией-членом.