qt中的qSort()函数问题,初学者求解答,急问

f12105212 2012-11-16 12:31:39
这段代码是一个简单的qSort()简单使用实例:
#include <QtCore/QCoreApplication>
#include <QList>
#include <QTextStream>
#include <QStringList>

bool caseInsensitiveLessThan(const QString &s1, const QString &s2);
void SortList(QList<QString>& qlist);

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);

QList<QString> list;
list.push_back("g1233");
list.push_back("g1333");
list.push_back("g0933");


SortList(list);

return a.exec();
}

bool caseInsensitiveLessThan(const QString &s1, const QString &s2)
{
return s1.toLower() < s2.toLower();
}

void SortList( QList<QString>& qlist)
{
qSort(qlist.begin(), qlist.end(), caseInsensitiveLessThan);
}

这个程序运行没问题,现在我把SortList改成一个类
SortList.h

#include <QList>
#include <QString>

class SortList
{
public:
SortList();
~SortList();

public:
bool caseInsensitiveLessThan( const QString &s1, const QString &s2 );
void sortList(QList<QString>& qlist);
};

SortList.cpp

#include "SortList.h"

bool SortList::caseInsensitiveLessThan( const QString &s1, const QString &s2 )
{
return s1.toLower() < s2.toLower();
}

void SortList::sortList( QList<QString>& qlist )
{
qSort(qlist.begin(), qlist.end(), &sort::caseInsensitiveLessThan);
}

编译类会报错,报错如下:
1>c:\qt\4.6.2\include\qtcore\../../src/corelib/tools/qalgorithms.h(351) : error C2064: 项不会计算为接受 2 个参数的函数
1> c:\qt\4.6.2\include\qtcore\../../src/corelib/tools/qalgorithms.h(187): 参见对正在编译的函数 模板 实例化“void QAlgorithmsPrivate::qSortHelper<RandomAccessIterator,T,LessThan>(RandomAccessIterator,RandomAccessIterator,const T &,LessThan)”的引用
1> with
1> [
1> RandomAccessIterator=QList<QString>::iterator,
1> T=QString,
1> LessThan=bool (__thiscall CodeEngine::* )(const QString &,const QString &)
1> ]
1> .\CodeEngine.cpp(931): 参见对正在编译的函数 模板 实例化“void qSort<QList<T>::iterator,bool(__thiscall CodeEngine::* )(const QString &,const QString &)>(RandomAccessIterator,RandomAccessIterator,LessThan)”的引用
1> with
1> [
1> T=QString,
1> RandomAccessIterator=QList<QString>::iterator,
1> LessThan=bool (__thiscall CodeEngine::* )(const QString &,const QString &)
1> ]
1>c:\qt\4.6.2\include\qtcore\../../src/corelib/tools/qalgorithms.h(356) : error C2064: 项不会计算为接受 2 个参数的函数
1>c:\qt\4.6.2\include\qtcore\../../src/corelib/tools/qalgorithms.h(358) : error C2064: 项不会计算为接受 2 个参数的函数
1>c:\qt\4.6.2\include\qtcore\../../src/corelib/tools/qalgorithms.h(366) : error C2064: 项不会计算为接受 2 个参数的函数

求问这是为什么啊??????
...全文
934 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
fenxian2011 2014-07-11
  • 打赏
  • 举报
回复
我也刚遇到这个问题,确实修改为static可行,想知道为啥?。。
Jonix 2013-02-15
  • 打赏
  • 举报
回复
caseInsensitiveLessThan 函数改为静态就可以了。

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧