《C++大学教程》中关于运算符重载的一个例程

rabbitjerry 2011-04-01 11:21:19
《C++大学教程(第二版)》第八章关于"<<"和">>"的重载的实例如下:

#include <iostream>
#include <iomanip>

class PhoneNumber{
friend ostream &operator<<(ostream&, const PhoneNumber&);
friend istream &operator>>(istream &, PhoneNumber &);
private:
char areaCode[4];
char exchange[4];
char line[5];
};
ostream &operator<<(ostream &output,const PhoneNumber & num)
{
output << "(" << num.areaCode <<") "
<< num.exchange << "-" << num.line;
return output;
}
istream &operator>>(istream &input, PhoneNumber & num)
{
input.ignore();
input >> setw(4) >>num.areaCode;
input.ignore(2);
input >> setw(4) >> num.exchange;
input.ignore();
input >> setw(5) >> num.line;
return input;
}

int main()
{
PhoneNumber phone;
cout << "Enter a phone number in the form of (123) 456-789:\n";
cin >> phone;
cout << "The phone number entered was: " << phone <<endl;
return 0;
}

上述代码中,除了注释没有copy过来,以及#include <iostream>和#include <iomanip>中没有加“.h”标示,其余都一样。
如果加了.h标示,则会报错说找不到文件。
然而把.h标示去掉后,报了27个错误:

1>fig08_03.cpp
1>d:\myc++study\fig08_03\fig08_03\fig08_03.cpp(5) : error C2143: syntax error : missing ';' before '&'
1>d:\myc++study\fig08_03\fig08_03\fig08_03.cpp(5) : error C2433: 'ostream' : 'friend' not permitted on data declarations
1>d:\myc++study\fig08_03\fig08_03\fig08_03.cpp(5) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>d:\myc++study\fig08_03\fig08_03\fig08_03.cpp(5) : error C2061: syntax error : identifier 'ostream'
1>d:\myc++study\fig08_03\fig08_03\fig08_03.cpp(5) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>d:\myc++study\fig08_03\fig08_03\fig08_03.cpp(5) : error C2805: binary 'operator <<' has too few parameters
1>d:\myc++study\fig08_03\fig08_03\fig08_03.cpp(6) : error C2143: syntax error : missing ';' before '&'
1>d:\myc++study\fig08_03\fig08_03\fig08_03.cpp(6) : error C2433: 'istream' : 'friend' not permitted on data declarations
1>d:\myc++study\fig08_03\fig08_03\fig08_03.cpp(6) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>d:\myc++study\fig08_03\fig08_03\fig08_03.cpp(6) : error C2061: syntax error : identifier 'istream'
1>d:\myc++study\fig08_03\fig08_03\fig08_03.cpp(6) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>d:\myc++study\fig08_03\fig08_03\fig08_03.cpp(6) : error C2805: binary 'operator >>' has too few parameters
1>d:\myc++study\fig08_03\fig08_03\fig08_03.cpp(12) : error C2143: syntax error : missing ';' before '&'
1>d:\myc++study\fig08_03\fig08_03\fig08_03.cpp(12) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>d:\myc++study\fig08_03\fig08_03\fig08_03.cpp(12) : error C2086: 'int ostream' : redefinition
1> d:\myc++study\fig08_03\fig08_03\fig08_03.cpp(5) : see declaration of 'ostream'
1>d:\myc++study\fig08_03\fig08_03\fig08_03.cpp(12) : error C2065: 'output' : undeclared identifier
1>d:\myc++study\fig08_03\fig08_03\fig08_03.cpp(12) : error C2059: syntax error : 'const'
1>d:\myc++study\fig08_03\fig08_03\fig08_03.cpp(13) : error C2143: syntax error : missing ';' before '{'
1>d:\myc++study\fig08_03\fig08_03\fig08_03.cpp(13) : error C2447: '{' : missing function header (old-style formal list?)
1>d:\myc++study\fig08_03\fig08_03\fig08_03.cpp(18) : error C2143: syntax error : missing ';' before '&'
1>d:\myc++study\fig08_03\fig08_03\fig08_03.cpp(18) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>d:\myc++study\fig08_03\fig08_03\fig08_03.cpp(18) : error C2086: 'int istream' : redefinition
1> d:\myc++study\fig08_03\fig08_03\fig08_03.cpp(6) : see declaration of 'istream'
1>d:\myc++study\fig08_03\fig08_03\fig08_03.cpp(18) : error C2065: 'input' : undeclared identifier
1>d:\myc++study\fig08_03\fig08_03\fig08_03.cpp(18) : error C2065: 'num' : undeclared identifier
1>d:\myc++study\fig08_03\fig08_03\fig08_03.cpp(18) : error C2275: 'PhoneNumber' : illegal use of this type as an expression
1> d:\myc++study\fig08_03\fig08_03\fig08_03.cpp(4) : see declaration of 'PhoneNumber'
1>d:\myc++study\fig08_03\fig08_03\fig08_03.cpp(18) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>d:\myc++study\fig08_03\fig08_03\fig08_03.cpp(18) : fatal error C1903: unable to recover from previous error(s); stopping compilation
1>Build log was saved at "file://d:\myC++Study\fig08_03\fig08_03\Debug\BuildLog.htm"
1>fig08_03 - 27 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========


我想这不是代码敲错了,应该是设置哪儿有问题吧。
环境是VS2005,默认安装的,没有做过设置方面的修改。之前跑过简单的C++程序也成功了。
请高手帮忙!!!
...全文
84 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sou2012 2011-04-02
  • 打赏
  • 举报
回复
using namespace std;
I_code 2011-04-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 rabbitjerry 的回复:]
谢谢楼上的三位!!!
【补充问题】
friend ostream &operator<<(ostream&, const PhoneNumber&);
输出流重载时为什么在PhoneNumber&前加const关键字?
[/Quote]

使传入的参数PhoneNumber的值不能该程序中改变...
rabbitjerry 2011-04-01
  • 打赏
  • 举报
回复
谢谢楼上的三位!!!
【补充问题】
friend ostream &operator<<(ostream&, const PhoneNumber&);
输出流重载时为什么在PhoneNumber&前加const关键字?
bluesky12312388 2011-04-01
  • 打赏
  • 举报
回复
VS2005不支持不标准的iostream.h
必须 使用iostream
然后using namespace std;
無_1024 2011-04-01
  • 打赏
  • 举报
回复

#include <iostream>
#include <iomanip>

using namespace std;

class PhoneNumber{
friend ostream &operator<<(ostream&, const PhoneNumber&);
friend istream &operator>>(istream &, PhoneNumber &);
private:
char areaCode[4];
char exchange[4];
char line[5];
};
ostream &operator<<(ostream &output,const PhoneNumber & num)
{
output << "(" << num.areaCode <<") "
<< num.exchange << "-" << num.line;
return output;
}
istream &operator>>(istream &input, PhoneNumber & num)
{
input.ignore();
input >> setw(4) >>num.areaCode;
input.ignore(2);
input >> setw(4) >> num.exchange;
input.ignore();
input >> setw(5) >> num.line;
return input;
}

int main()
{
PhoneNumber phone;
cout << "Enter a phone number in the form of (123) 456-789:\n";
cin >> phone;
cout << "The phone number entered was: " << phone <<endl;
return 0;
}

//VS2010 通过
無_1024 2011-04-01
  • 打赏
  • 举报
回复
加一个using namespace std;

64,654

社区成员

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

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