gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:37:45 27 4
gpt4 key购买 nike

我正在尝试根据 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);

到达Record的getter和setter:

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

getDate() Arrival 函数:

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);
^^^^^^^^^^

您不能将非静态成员函数用作排序函数,因为需要在某些对象上调用非静态成员函数(以提供 this 指针)。您不能像普通函数一样调用成员函数,这就是编译器错误的含义。如果您阅读了整个错误消息,而不仅仅是第一行,那么它会告诉您它来自上面的行。

要么将 sortRecord 函数设为非成员函数,要么将其设为static 成员函数。

为什么它仍然是一个成员函数?它不访问 *this,也不使用任何私有(private)成员……这听起来像糟糕的面向对象风格,这不是我们在 C++ 中做事的方式(参见例如 How non-member functions increase encapsulation)。

另外,为什么您的 sortRecord 函数复制它的参数而不是使用引用? (参见 https://isocpp.org/wiki/faq/references#call-by-reference)

如果您想将所有内容都编写为成员函数并具有按引用传递的语义,那么请使用 Java,而不是 C++。否则,停止用 C++ 编写 Java 代码。

关于c++ - 必须使用 '.*' 或 '->*' 来调用 'lessThan (...)' 中的指向成员函数的指针,例如 '(... ->* lessThan) (...)',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33913305/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com