找回密码
 注册
搜索
热搜: 回贴
  • 前程无忧官网首页 有什么好的平台可以
  • 最新的销售平台 互联网营销的平台有哪
  • 制作网页的基本流程 网页制作和网页设
  • 【帝国CMS】输出带序号的列表(数字排
  • 网站建设公司 三一,中联,极东泵车的
  • 织梦 建站 织梦网站模版后台怎么更改
  • 云服务官网 哪些网站有免费的简历模板
  • 如何建网站要什么条件 建网站要用什么
  • 吉林市移动公司电话 吉林省退休人员网
  • 设计类毕业论文 网站设计与实现毕业论
查看: 1325|回复: 5

[求助]重载问题

[复制链接]
发表于 2009-11-3 02:17:50 | 显示全部楼层 |阅读模式 IP:江苏扬州
#include<iostream>
#include<string>
using namespace std;
class person{
private:
string name,address;
char sex;
int ID;
public:
person(){name="king";address="09109";sex='M';ID=109;}
person(string name1,string address1,char sex1,int ID1);
void New_set();
void out_message();
friend ostream& operator<<(ostream& stream,person& p);
friend istream& operator>>(istream& stream,person& p);
};
void person::out_message()
{
cout<<"姓 名:"<<name<<endl;
cout<<"性 别:"<<sex<<endl;
cout<<"地 址:"<<address<<endl;
cout<<"身份证号:"<<ID<<endl;
}
person::person(string name1,string address1,char sex1,int ID1)
{
name=name1;
address=address1;
sex=sex1;
ID=ID1;
}
void person::New_set()
{
cout<<"请输入姓名:";
cin>>name;
cout<<"请输入地址:";
cin>>address;
cout<<"请输入性别:";
cin>>sex;
cout<<"请输入身份证号:";
cin>>ID;
}
ostream& operator<<(ostream& stream,person& p)
{
p.out_message();
return stream;
}
istream& operator>>(istream& stream,person& p)
{
p.New_set();
return stream;
}
void main()
{
person A;
cout<<A<<endl;
cout<<"请输入更新后的信息:"<<endl;
cin>>A;
cout<<A<<endl;
}


运行结果:
--------------------Configuration: Cpp2 - Win32 Debug--------------------
Compiling...
Cpp2.cpp
E:\C++\I-O流实验\Cpp2.cpp(63) : error C2593: 'operator <<' is ambiguous
E:\C++\I-O流实验\Cpp2.cpp(65) : error C2593: 'operator >>' is ambiguous
E:\C++\I-O流实验\Cpp2.cpp(66) : error C2593: 'operator <<' is ambiguous
Error executing cl.exe.
Cpp2.exe - 3 error(s), 0 warning(s)

哪个大虾帮忙看下撒
以前都没问题的啊~~~
发表于 2009-11-3 02:17:54 | 显示全部楼层 IP:江苏扬州
以下是引用weikie在2006-5-23 21:22:00的发言:

#include<iostream>
#include<string>
using namespace std;
class person{
private:
string name,address;
char sex;
int ID;
public:
person(){name="king";address="09109";sex='M';ID=109;}
person(string name1,string address1,char sex1,int ID1);
void New_set();
void out_message();
friend ostream& operator<<(ostream& stream,person& p);
friend istream& operator>>(istream& stream,person& p);
};
void person::out_message()
{
cout<<"姓 名:"<<name<<endl;
cout<<"性 别:"<<sex<<endl;
cout<<"地 址:"<<address<<endl;
cout<<"身份证号:"<<ID<<endl;
}
person::person(string name1,string address1,char sex1,int ID1)
{
name=name1;
address=address1;
sex=sex1;
ID=ID1;
}
void person::New_set()
{
cout<<"请输入姓名:";
cin>>name;
cout<<"请输入地址:";
cin>>address;
cout<<"请输入性别:";
cin>>sex;
cout<<"请输入身份证号:";
cin>>ID;
}
ostream& operator<<(ostream& stream,person& p)
{
p.out_message();//流对象是stream,但是你这里是把数据插入到流对象cout中
return stream;//现在stream对象中,什么都没有
}
istream& operator>>(istream& stream,person& p)
{
p.New_set();//流对象是stream,但是你这里是把数据插入到流对象cin中
return stream;//现在stream对象中,什么都没有
}
void main()
{
person A;
cout<<A<<endl;
cout<<"请输入更新后的信息:"<<endl;
cin>>A;
cout<<A<<endl;
}


运行结果:
--------------------Configuration: Cpp2 - Win32 Debug--------------------
Compiling...
Cpp2.cpp
E:\C++\I-O流实验\Cpp2.cpp(63) : error C2593: 'operator <<' is ambiguous
E:\C++\I-O流实验\Cpp2.cpp(65) : error C2593: 'operator >>' is ambiguous
E:\C++\I-O流实验\Cpp2.cpp(66) : error C2593: 'operator <<' is ambiguous
Error executing cl.exe.
Cpp2.exe - 3 error(s), 0 warning(s)

哪个大虾帮忙看下撒
以前都没问题的啊~~~
回复

使用道具 举报

发表于 2009-11-3 02:17:57 | 显示全部楼层 IP:江苏扬州
#include<iostream.h>
class person{
private:
char name,address;
char sex;
int ID;
public:
person(){name='k';address='0';sex='M';ID=109;};
person(char name1,char address1,char sex1,int ID1);
void New_set(istream& stream);
void out_message(ostream& stream);
friend ostream& operator<<(ostream& stream,person& p);
friend istream& operator>>(istream& stream,person& p);
};
void person::out_message(ostream& stream)
{
stream<<"姓 名:"<<name<<endl;
stream<<"性 别:"<<sex<<endl;
stream<<"地 址:"<<address<<endl;
stream<<"身份证号:"<<ID<<endl;
}
person::person(char name1,char address1,char sex1,int ID1)
{
name=name1;
address=address1;
sex=sex1;
ID=ID1;
}
void person::New_set(istream& stream)
{
cout<<"请输入姓名:";
stream>>name;
cout<<"请输入地址:";
stream>>address;
cout<<"请输入性别:";
stream>>sex;
cout<<"请输入身份证号:";
stream>>ID;
}
ostream& operator<<(ostream& stream,person& p)
{
p.out_message(stream);
return stream;
}
istream& operator>>(istream& stream,person& p)
{
p.New_set(stream);
return stream;
}
void main()
{
try{
person A;
cout<<A;
cout<<"请输入更新后的信息:"<<endl;
cin>>A;
cout<<A<<endl;
}
catch(...)
{
cout<<"error";
}
}
大概是因为string不能重载吧.
用VS.2003可以编译.建议你用新的编译器.
回复

使用道具 举报

发表于 2009-11-3 02:18:00 | 显示全部楼层 IP:江苏扬州
友元重载函数声明和重载函数实现有二义性,可以通过下面两个方法解决:
1.在友元声明处实现函数,这样不会有二义性:

  1. friend ostream& operator<<(ostream& stream,person& p)
  2. {
  3. p.out_message();
  4. return stream;
  5. }
  6. friend istream& operator>>(istream& stream,person& p)
  7. {
  8. p.New_set();
  9. return stream;
  10. }
复制代码

2.在友元声明前声明一下重载函数的原型,避免造成二义性

  1. class person;
  2. ostream& operator<<(ostream& stream,person& p);
  3. istream& operator>>(istream& stream,person& p);

  4. class person{
  5. private:
  6. string name,address;
  7. char sex;
  8. int ID;
  9. public:
  10. person(){name="king";address="09109";sex='M';ID=109;}
  11. person(string name1,string address1,char sex1,int ID1);
  12. void New_set();
  13. void out_message();
  14. friend ostream& operator<<(ostream& stream,person& p);
  15. friend istream& operator>>(istream& stream,person& p);
  16. };
复制代码
回复

使用道具 举报

发表于 2009-11-3 02:18:01 | 显示全部楼层 IP:江苏扬州
to aogun:
原来是如此,领教了~!
回复

使用道具 举报

发表于 2009-11-3 02:18:02 | 显示全部楼层 IP:江苏扬州
呵呵,等我学久了我就会解决了的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-30 09:37 , Processed in 0.181907 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表