免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3164 | 回复: 10
打印 上一主题 下一主题

用C++模板自已做了一个动态数组,重载了其中的"=="但出问题了 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-21 19:48 |只看该作者 |倒序浏览
用C++模板自已做了一个动态数组,重载了其中的"=="

比如
template<class atype>
class TempArry{
public:
....

bool operator==(const TempArry<atype> &ob)const{
     
   bool ret = true;
     for(int i =0;i< len;i++){
        if( !(this->a == ob.a) ){   <----------------------------出问题
             ret = false;
             break;
        }
     }
       return ret;
}

private:

  atype *a;
  int len;     
};

typedef struct stra_type{
  char a;
  int x,y;
  
}stra_t;


int main(){

  TempArry<stra_t> a;
  
}

编译时出了问题.编译器说它不知道 如何持行 struct stra_type 的相等操作符"==";
" no match for  'stra_type & == stra_type & ' "

这个结构体要重载"=="? 囧

[ 本帖最后由 ljoo 于 2008-12-21 19:54 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-12-21 19:52 |只看该作者
bool operater==(const TempArry<atype> &ob)const{

改为

bool operater==(const TempArry &ob)const{

试试

论坛徽章:
0
3 [报告]
发表于 2008-12-21 19:56 |只看该作者
刚试过.不行.
哪个错误还在.

论坛徽章:
0
4 [报告]
发表于 2008-12-21 21:34 |只看该作者
bool operator==(const TempArry<atype> &ob)const

你这是常量函数吧, 哪里来的this指针呢?

论坛徽章:
0
5 [报告]
发表于 2008-12-22 07:29 |只看该作者
编译结果不是说了吗,你的模板实例化后atype是stra_type,也就是a[i]的类型是stra_type,那种类型的对象还没有定义 == 运算。

论坛徽章:
0
6 [报告]
发表于 2008-12-22 10:07 |只看该作者

回复 #5 emacsnw 的帖子

刚才说错了, 编译器默认生成operator=, 不是operator==.

[ 本帖最后由 zzyong08 于 2008-12-22 10:14 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2008-12-22 10:56 |只看该作者
没错啊,lz用的什么编译器

论坛徽章:
0
8 [报告]
发表于 2008-12-22 11:27 |只看该作者

回复 #6 zzyong08 的帖子

struct stra_type本来是个结构体,所以我就不想重载"==",
因为假如我去包含一堆"XXX.h"的c文件,用其中定义的结构体,我还要在"xxx.h" 中去重构 "=="运算符吗?这个兼容性就出问题了吧.

论坛徽章:
0
9 [报告]
发表于 2008-12-22 11:29 |只看该作者

回复 #7 xiaochongs 的帖子

cygwin 里的g++

论坛徽章:
0
10 [报告]
发表于 2008-12-22 11:31 |只看该作者
原帖由 ljoo 于 2008-12-21 19:27 发表
struct stra_type本来是个结构体,所以我就不想重载"==",
因为假如我去包含一堆"XXX.h"的c文件,用其中定义的结构体,我还要在"xxx.h" 中去重构 "=="运算符吗?这个兼容性就出问题了吧.


不要定义为成员函数,全局比较好:
bool operator==(const XXX &x, const XXX &y) {
  ...
}

这样不需要改原来结构体的定义。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP