求助:关于list的sort方法

rinai 2007-08-09 12:58:57
各位大侠帮我看下吧

编译显示如下:
"test.cpp", line 56: Error: Could not find a match for std::list<Element, std::allocator<Element>>::sort(CompA).
"test.cpp", line 57: Error: Could not find a match for std::list<Element, std::allocator<Element>>::sort(CompB).

编译环境是CC,Forte C++ 6 update 2

代码如下:

#include <list>

using namespace std;

class Element
{
public:
Element(int x, int y) : a(x), b(y)
{
}
~Element() {}

getA() const
{
return a;
}

getB() const
{
return b;
}

private:
int a;
int b;
};

class CompA
{
public:
operator()(const Element& x, const Element& y)
{
return (x.getA() < y.getA());
}
};

class CompB
{
public:
operator()(const Element& x, const Element& y)
{
return (x.getB() < y.getB());
}
};

int main()
{
list<Element> listE;
Element obj1(1,2);
Element obj2(2,1);

listE.push_back(obj1);
listE.push_back(obj2);

listE.sort(CompA());
listE.sort(CompB());

listE.clear();

return 0;
}

不好意思,我是新来的,没有分,感谢先!
...全文
663 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
daohua 2007-08-09
  • 打赏
  • 举报
回复
新来的先交保护费
rinai 2007-08-09
  • 打赏
  • 举报
回复
谢谢大家,暂时搞定了,把我这边的STL里的list里的sort方法修改了下,但是还有写迷惑,等更清晰了,再和大家讨论下,谢谢!

ps:list源码我看了将近一天,它里面确实有bug,但是和我用到的东西无关!
taodm 2007-08-09
  • 打赏
  • 举报
回复
那你为什么不肯去看一下list的源码呢,3分钟就够了。
摘出list的所有sort版本的函数声明,贴出来一看就知道了。
Vitin 2007-08-09
  • 打赏
  • 举报
回复
你可以测试一下,传原始的函数指针给std::list::sort,看它能不能成功。
实在不行,只有看文档或源代码了。
Vitin 2007-08-09
  • 打赏
  • 举报
回复
恩,我是说std::list::sort可能不支持函数对象。
rinai 2007-08-09
  • 打赏
  • 举报
回复
我做过试验了,它支持函数对象,至少在algorithm下的sort是好用的!
Vitin 2007-08-09
  • 打赏
  • 举报
回复
程序本身有一个错的地方:一些函数没有写返回值。
在C++标准03中,不支持默认返回值为int,所以在class A中,
operator()(const Element& x, const Element& y) 是不对的。
应该是
bool operator()(const Element& x, const Element& y)

此外class Element中
getA() const 也是不对的。
应该是
int getA() const

如果你使用的编译器没有对此报错,那么它可能很大程度上不支持C++标准03。

此外,看错误信息中list的声明std::list<Element, std::allocator<Element>>...
那么它看起来并不支持函数对象。一般支持函数对象,则函数对象的类型也应该是参数化的。


taodm 2007-08-09
  • 打赏
  • 举报
回复
打开list文件,找sort,看它怎么声明的。
csdn5211 2007-08-09
  • 打赏
  • 举报
回复
listE.sort(CompA());//可以这样吗?

64,647

社区成员

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

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