| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2741 人关注过本帖
标题:重载输入输出运算符的问题
只看楼主 加入收藏
骇客
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2004-11-9
收藏
 问题点数:0 回复次数:18 
重载输入输出运算符的问题

#include<iostream> using namespace std; class OpoverClass { friend ostream& operator<<(ostream&,const OpoverClass&); friend istream& operator>>(istream&,OpoverClass&); public: OpoverClass operator+ (const OpoverClass&) const; OpoverClass operator* (const OpoverClass&) const; OpoverClass (int i=0,int j=0){a=i;b=j;};

int a; int b; };

ostream& operator<<(ostream& osObject,const OpoverClass& right) { osObject<<"("<<right.a<<","<<right.b<<")"; return osObject; }

istream& operator>>(istream& isObject,OpoverClass& right) { isObject>>right.a>>right.b; return isObject; }

OpoverClass OpoverClass::operator *(const OpoverClass& right) const { OpoverClass temp; temp.a=a*right.a; temp.b=b*right.b; return temp; }

OpoverClass OpoverClass::operator +(const OpoverClass& right) const { OpoverClass temp; temp.a=a+right.a; temp.b=b+right.b; return temp; }

int main() { OpoverClass u(23,46); OpoverClass v; cout<<"u="<<u<<endl; cout<<"Enter two integers:"; cin>>v; cout<<endl; cout<<"u+v="<<u+v<<endl; cout<<"u*v="<<u*v<<endl; return 0; }

请大家帮忙看下错误:D:\c++\vdgfd\vfdf.cpp(51) : error C2593: 'operator <<' is ambiguous D:\c++\vdgfd\vfdf.cpp(53) : error C2593: 'operator >>' is ambiguous D:\c++\vdgfd\vfdf.cpp(55) : error C2593: 'operator <<' is ambiguous D:\c++\vdgfd\vfdf.cpp(56) : error C2593: 'operator <<' is ambiguous Error executing cl.exe.

vfdf.obj - 4 error(s), 0 warning(s)

搜索更多相关主题的帖子: 运算符 OpoverClass operator const 
2004-12-26 14:52
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 
我用VC6.0 以及Dev 编译运行你的程序。你的程序完全正确。

自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2004-12-28 01:51
C++大粉丝
Rank: 4
等 级:贵宾
威 望:10
帖 子:477
专家分:0
注 册:2004-4-23
收藏
得分:0 

呵呵,有问题呀,看看提示就知道你自定义函数的和C++库本身的函数冲突(ambiguous意思是:不明确的...)了.

所以说,你既然是要在OpoverClass里重载运算符,你的重载定义就应该是在OpoverClass的域空间里(OpoverClass::)

可是你再看看你写的定义,你污染了全局名字空间了,现在你应该能明白为什么你重载的" * "和" + "为什么没有问题...

再有,编译器提示不提示错误或警告是它的事情,我们不应该过于依赖它的表现,而应该遵守语言本身的规范,虽然C++语言复杂而强大,它的规范也过多的体现出"模棱两可"的语言特性,这是因为C++语言和客观事物的"复杂"本质.

[em44]

I am a big fan of c plus plus.
2004-12-28 09:08
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 

我反复看了楼主的程序,觉得没有问题,但楼主明明说他的程序出错。我编译并运行楼主的代码,先用VC6.0,完全正确,那么何以来报错信息呢?然后再用Dev ,一样是完全正确。我再反复看楼主的程序,没有任何违背C++ 语言的规范。但看了3楼姬老师的帖子,我试图找出错误之处。还是始终找不出。所以就不明白了。

希望姬老师能给出正解(明确指出代码有误之处)。


自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2004-12-28 10:00
C++大粉丝
Rank: 4
等 级:贵宾
威 望:10
帖 子:477
专家分:0
注 册:2004-4-23
收藏
得分:0 
这种错误也许是比较严格的编译器造成的,是不是用C++ Builder 6 ??

[此贴子已经被作者于2004-12-29 08:57:38编辑过]



I am a big fan of c plus plus.
2004-12-29 08:42
骇客
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2004-11-9
收藏
得分:0 
对,我是用C++ Builder 6,我也看不懂3楼斑竹所说的,好深奥啊
2004-12-30 20:55
柳儿
Rank: 6Rank: 6
等 级:贵宾
威 望:25
帖 子:1830
专家分:30
注 册:2004-9-23
收藏
得分:0 
老师说过这个是顶层重载吧。如果有问题的话,那就是编译器遵循的标准不一样,更严格了。我用的Borland 5.5 没有这个问题。

成功会使人骄傲。如果你骄傲自大,你就会停止学习。不学习,人就停止了进步
2004-12-31 11:44
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 
在这里,我给出说明,楼主的程序严格从语言规范的角度出发来看毫无问题,我对姬老师对大家的误导深表遗憾(3楼,以及5楼的帖子)。 也请各位斑竹谨慎发言!!!

自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2005-01-02 03:46
C++大粉丝
Rank: 4
等 级:贵宾
威 望:10
帖 子:477
专家分:0
注 册:2004-4-23
收藏
得分:0 
C++Builder在参数的匹配准则上和VC++不一样,原来是这么回事.

[此贴子已经被作者于2005-1-7 12:58:33编辑过]



I am a big fan of c plus plus.
2005-01-02 09:20
navy1860
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2005-9-12
收藏
得分:0 
#include<iostream> using namespace std; class OpoverClass { friend ostream& operator<<(ostream&,const OpoverClass&); friend istream& operator>>(istream&,OpoverClass&); public: OpoverClass operator+ (const OpoverClass&) const; OpoverClass operator* (const OpoverClass&) const; OpoverClass (int i=0,int j=0){a=i;b=j;}; int a; int b; };
QUOTE:
2005-09-12 09:32
快速回复:重载输入输出运算符的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015444 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved