为什么必须是非成员函数

GaryArch 2007-07-12 01:48:11
我把自定义的对象,放到优先队列中,priority_queue
默认的使用less<>比较器,为什么,我自定义的类的operator《必须是非成员的,如果是成员行数就会编译通不过
pq.cpp: In member function `bool _less<T>::operator()(T, T) [with T = test]':
pq.cpp:49: instantiated from here
pq.cpp:30: passing `const test' as `this' argument of `bool
test::operator<(test)' discards qualifiers
...全文
267 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
casale 2007-07-12
  • 打赏
  • 举报
回复
如果传的是函数指针的话,用成员函数就必须是static的,否则就只能用非成员函数了,因为类的non static成员函数是会默认加上一个this参数的,所以就会出现参数类型不匹配了。
不过楼主给的信息不全,不确定是否这个原因
taodm 2007-07-12
  • 打赏
  • 举报
回复
你试一下不就知道了。
GaryArch 2007-07-12
  • 打赏
  • 举报
回复
我出现问题的原因是没有在 bool operator <(const test a)方法上加 const加上const 就可以了

为什么c++编程思想 ,第二卷,实用技术 304 ,中间 怎么会用这句话呢

由于是与less<>一同工作,所以ToDoTem的operator<必须是一个非成员函数
taodm 2007-07-12
  • 打赏
  • 举报
回复
贴全代码

64,639

社区成员

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

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