必须使用'。*'或' - > *'在'lessThan(...)'中调用指向成员的函数,例如'(... - > * lessThan)(...)'

时间:2015-11-25 09:52:51

标签: c++ qt qsort qlist

我正在尝试根据QDateTime对QList进行排序,但是我收到以下错误:

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

我做错了什么?

谢谢!

2 个答案:

答案 0 :(得分:4)

问题在于:

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

您不能使用非静态成员函数作为sort函数,因为需要在某个对象上调用非静态成员函数(以提供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 ++。否则,停止用C ++编写Java代码。

答案 1 :(得分:1)

尝试使用此功能进行排序。

$('.qty').val('');

并确保getArrival()和getDate()是const方法。