QPointers的排序向量

Sorting vector of QPointers

本文关键字:向量 排序 QPointers      更新时间:2023-10-16

我有:

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();
}

我正在尝试根据"getSecsTillDeadline()"函数返回的值对QPointers的向量进行排序

但我得到了错误"必须使用".*"或"->*"来调用指向成员函数的指针"。

我哪里错了?错误在预定义的ops.h文件中,所以我可以想象在我自己的代码中有一些东西我可以更改以使其工作

完整的错误是:

C:QtToolsmingw492_32i686-w64-mingw32includec++bitspredefined_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)); }
                                          ^

从错误消息中可以看出,custComparFunctionToDoItem类中的非静态成员函数。不能像"普通"非成员函数指针那样使用非静态成员函数。

最简单的解决方案是使函数成为static成员函数。