簡體   English   中英

必須使用'。*'或' - > *'在'lessThan(...)'中調用指向成員的函數,例如'(... - > * lessThan)(...)'

[英]must use '.*' or '->*' to call pointer-to-member function in 'lessThan (…)', e.g. '(… ->* lessThan) (…)'

我試圖基於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);

到達記錄的吸氣劑和制定者:

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

我做錯了什么?

謝謝!

問題出在這里:

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

您不能使用非靜態成員函數作為sort函數,因為需要在某個對象上調用非靜態成員函數(以提供this指針)。 你不能像正常函數一樣調用成員函數,這就是編譯器錯誤的含義。 如果您已經閱讀了整個錯誤消息,而不僅僅是第一行,那么它會告訴您它來自上面的行。

使sortRecord函數成為非成員函數,或使其成為static成員函數。

為什么它仍然是會員功能? 它不會訪問*this ,或者使用任何私有成員......這就像是面向對象的糟糕風格,這不是我們在C ++中做事的方式(參見例如非成員函數如何增加封裝 )。

另外,為什么sortRecord函數復制其參數而不是使用引用? (參見https://isocpp.org/wiki/faq/references#call-by-reference

如果您想將所有內容都編寫為成員函數並具有傳遞引用語義,那么請使用Java而不是C ++。 否則,停止在C ++中編寫Java代碼。

嘗試此功能進行排序。

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

並確保getArrival()和getDate()是const方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM