Почему не работает qSort ()? - PullRequest
3 голосов
/ 10 апреля 2011

Хорошо, я пытаюсь отсортировать список своих собственных классов TvShow, чтобы отобразить список TvShows в порядке, определенном пользователем. Это то, что я придумал до сих пор, прочитав документацию по qSort ().

bool MainWindow::compareShowsByName(TvShow* showA, TvShow* showB)
{
    return showA->getShowName() < showB->getShowName();
}

QList<TvShow*> MainWindow::orderShowsByName()
{
    QList<TvShow*> orderedShowList = appSettings.TvShows;
    qSort(orderedShowList.begin(), orderedShowList.end(), compareShowsByName);
    return orderedShowList;
}

Конечно, это происходит со следующими ошибками:

../EpisodeNext/mainwindow.cpp: In member function 'QList<TvShow*> MainWindow::orderShowsByName()':
../EpisodeNext/mainwindow.cpp:192: error: no matching function for call to 'qSort(QList<TvShow*>::iterator, QList<TvShow*>::iterator, <unresolved overloaded function type>)'
../../QtSDK/Simulator/Qt/gcc/include/QtCore/qalgorithms.h:184: note: candidates are: void qSort(RandomAccessIterator, RandomAccessIterator, LessThan) [with RandomAccessIterator = QList<TvShow*>::iterator, LessThan = bool (MainWindow::*)(TvShow*, TvShow*)]
../EpisodeNext/mainwindow.cpp: In member function 'QList<TvShow*> MainWindow::orderShowsByAirDate()':
../EpisodeNext/mainwindow.cpp:199: error: no matching function for call to 'qSort(QList<TvShow*>::iterator, QList<TvShow*>::iterator, <unresolved overloaded function type>)'
../../QtSDK/Simulator/Qt/gcc/include/QtCore/qalgorithms.h:184: note: candidates are: void qSort(RandomAccessIterator, RandomAccessIterator, LessThan) [with RandomAccessIterator = QList<TvShow*>::iterator, LessThan = bool (MainWindow::*)(TvShow*, TvShow*)]
make: *** [mainwindow.o] Error 1

Есть идеи, что может быть не так? Я использую последнюю версию Qt SDK (Qt SDK 1.1 RC с Qt 4.7.3)

Заранее спасибо!

1 Ответ

12 голосов
/ 10 апреля 2011

Робин, вы все сделали правильно, за исключением того, что вам нужно объявить вашу функцию «compareShowsByName» как глобальную в вашем файле MainWindow.cpp.Таким образом, подобный код компилируется и работает нормально:

bool compareShowsByName(TvShow* showA, TvShow* showB)
{
    return showA->getShowName() < showB->getShowName();
}

QList<TvShow*> MainWindow::orderShowsByName()
{
    QList<TvShow*> orderedShowList = appSettings.TvShows;
    qSort(orderedShowList.begin(), orderedShowList.end(), compareShowsByName);
    return orderedShowList;
}

Примечание: вам не обязательно объявлять «compareShowsByName» в вашем MainWindow.h, если вы не хотите использовать его где-то за пределами MainWindow (в любом другомчасть вашего приложения).Но если вы все еще хотите объявить свой «compareShowsByName» как функцию-член вашего класса MainWindow, просто передайте указатель на функцию-член правильно.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...