0

私は持っている:

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 のベクトルをソートしようとしています

しかし、「メンバー関数へのポインターを呼び出すには、「.*」または「->*」を使用する必要があります」というエラーが表示されます。

どこが間違っているのですか?エラーはファイル defined_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)); }
                                          ^
4

1 に答える 1

0

クラスcustComparFunctionの非静的メンバー関数であるエラーメッセージからのようです。ToDoItem「通常の」非メンバー関数ポインターのような非静的メンバー関数は使用できません。

最も簡単な解決策は、関数をstaticメンバー関数にすることです。

于 2015-11-09T13:10:39.213 に答える