Может, это и C++, но вопрос такой:
Имеется класс
Manager c методом
compareIdsByNum_lessThan, сравнивающим 2 целых числа (идентификатора) на основе информации из объекта этого класса (т.е. сравнение происходит с учётов некоторых характеристик этих идентификаторов, а не просто "сравнить 2 числа"):
bool compareIdsByNum_lessThan(const int &id_1, const int &id_2);
В одном из методов класса Manager сортирую элементы списка (целые числа - идентификаторы) функцией qSort. parameterEndUse_index - список QList этих идентификаторов (целых чисел).
qSort(this->parameterEndUse_index.begin(), this->parameterEndUse_index.end(), Manager::compareIdsByNum_lessThan);
Результат:
argument of type `bool (Manager:
(const int&, const int&)' does not match `bool (Manager::*)(const int&, const int&)'
Ставим "указатель" на метод класса:
qSort(this->parameterEndUse_index.begin(),
this->parameterEndUse_index.end(),
&Manager::compareIdsByNum_lessThan);
Результат:
c:/GPL/Qt/4.3.1/include/QtCore/../../src/corelib/tools/qalgorithms.h instantiated from `void qSort(RandomAccessIterator, RandomAccessIterator, LessThan) [with RandomAccessIterator = QList<int>::iterator, LessThan = bool (Manager::*)(const int&, const int&)]'
c:/GPL/Qt/4.3.1/include/QtCore/../../src/corelib/tools/qalgorithms.h must use .* or ->* to call pointer-to-member function in `lessThan (...)'
c:/GPL/Qt/4.3.1/include/QtCore/../../src/corelib/tools/qalgorithms.h must use .* or ->* to call pointer-to-member function in `lessThan (...)'
c:/GPL/Qt/4.3.1/include/QtCore/../../src/corelib/tools/qalgorithms.h must use .* or ->* to call pointer-to-member function in `lessThan (...)'
c:/GPL/Qt/4.3.1/include/QtCore/../../src/corelib/tools/qalgorithms.h must use .* or ->* to call pointer-to-member function in `lessThan (...)'
c:/GPL/Qt/4.3.1/include/QtCore/../../src/corelib/tools/qalgorithms.h must use .* or ->* to call pointer-to-member function in `lessThan (...)'
c:/GPL/Qt/4.3.1/include/QtCore/../../src/corelib/tools/qalgorithms.h must use .* or ->* to call pointer-to-member function in `lessThan (...)'
Одна и та же ошибка аж в 6 экземплярах...
Делаем то же самое через предварительно объявленный и проинициализированный указатель на метод:
bool (Manager::*lessThan)(const int &id_1, const int &id_2);
lessThan = &Manager::compareIdsByNum_lessThan;
qSort(this->parameterEndUse_index.begin(),
this->parameterEndUse_index.end(),
lessThan);
Результат - тот же:
c:/GPL/Qt/4.3.1/include/QtCore/../../src/corelib/tools/qalgorithms.h instantiated from `void qSort(RandomAccessIterator, RandomAccessIterator, LessThan) [with RandomAccessIterator = QList<int>::iterator, LessThan = bool (Manager::*)(const int&, const int&)]'
c:/GPL/Qt/4.3.1/include/QtCore/../../src/corelib/tools/qalgorithms.h must use .* or ->* to call pointer-to-member function in `lessThan (...)'
c:/GPL/Qt/4.3.1/include/QtCore/../../src/corelib/tools/qalgorithms.h must use .* or ->* to call pointer-to-member function in `lessThan (...)'
c:/GPL/Qt/4.3.1/include/QtCore/../../src/corelib/tools/qalgorithms.h must use .* or ->* to call pointer-to-member function in `lessThan (...)'
c:/GPL/Qt/4.3.1/include/QtCore/../../src/corelib/tools/qalgorithms.h must use .* or ->* to call pointer-to-member function in `lessThan (...)'
c:/GPL/Qt/4.3.1/include/QtCore/../../src/corelib/tools/qalgorithms.h must use .* or ->* to call pointer-to-member function in `lessThan (...)'
c:/GPL/Qt/4.3.1/include/QtCore/../../src/corelib/tools/qalgorithms.h must use .* or ->* to call pointer-to-member function in `lessThan (...)'
Что за чудеса ?