2015-11-25 5 views
3

Я пытаюсь сортировать мой QList на основе QDateTime, но я получаю следующее сообщение об ошибке:должен использовать '. *' Или '-> *' для вызова функции указатель-член в 'lessThan (...)', например. '(... -> * LessThan) (...)'

must use '.*' or '->*' to call pointer-to-member function in 'lessThan (...)', e.g. '(... ->* lessThan) (...)' 
if (lessThan(*end, *start)) 
         ^

Сортировка функции:

bool sortRecord(Record left, Record right){ 
    return left.getArrival().getDate() < right.getArrival().getDate(); 
} 

Функция называется так:

qSort(recordList.begin(), recordList.end(), sortRecord); 

Getter и законодательницей прибытия в записи:

void Record::setArrival(Arrival arrival){ 
    this->arrival = arrival; 
} 
Arrival Record::getArrival(){ 
    return this->arrival; 
} 

getDate() функция Прибытие:

QDateTime Arrival::getDate(){ 
    QDateTime qDateTime; 

    QDate qDate; 
    qDate.setDate(date.getDateYear(), date.getDateMonth(), date.getDateDay()); 
    qDateTime.setDate(qDate); 

    vector<string> timeS = splitTime(time.getTimeFrom()); 

    QTime qTime; 
    qTime.setHMS(stoi(timeS[0]), stoi(timeS[1]), 0); 
    qDateTime.setTime(qTime); 

    return qDateTime; 
} 

Что это такое, что я делаю не так?

Спасибо!

+1

Где используется 'lessThan', где он указан? – melak47

+0

Функция lessThan объявлена ​​внутри qalgorithms.h, которая является частью структуры QT. –

+3

Итак, где/как вы вызываете сортировку? – melak47

ответ

4

Проблема здесь:

qSort(recordList.begin(), recordList.end(), sortRecord); 
              ^^^^^^^^^^ 

Вы не можете использовать не статическую функцию-член в качестве функции сортировки, так как не статическую функцию-член должен быть вызван на какой-либо объект (чтобы обеспечить this указатель). Вы не можете просто вызвать функцию-член как обычную функцию, что и означает ошибка компилятора. Если бы вы прочитали все сообщение об ошибке, а не только первую строчку, то это сказало бы вам, что оно исходит из строки выше.

Либо сделайте функцию sortRecord функцией, не являющейся членом, или сделайте ее функцией-членом static.

Почему это функция-член в любом случае? Он не имеет доступа к *this или использует какие-либо частные члены ... это пахнет как плохой объектно-ориентированный стиль, это не то, как мы делаем вещи на C++ (см., Например, How non-member functions increase encapsulation).

Также почему ваша функция sortRecord копирует свои аргументы вместо использования ссылок? (См. https://isocpp.org/wiki/faq/references#call-by-reference)

Если вы хотите написать все как функцию-член и иметь семантику pass-by-reference, используйте Java, а не C++. В противном случае прекратите писать Java-код на C++.

+8

Возможно, вам захочется смягчиться. OP явно не знаком с C++. Вы могли бы опубликовать какую-нибудь наводящую обратную связь вместо того, чтобы пылать его. Мы все были чем-то новым, даже вы, Эйнштейн. – Craimasjien

1

Попробуйте эту функцию для сортировки.

bool sortRecord(const Record& left, const Record& right) 
{ 
    return left.getArrival().getDate() < right.getArrival().getDate(); 
} 

А также убедитесь, что getArrival() и getDate() являются методами const.

+1

Хотя это хорошее предложение, оно не решает проблему. –