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

rabbitjerry rabbitjerry 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
《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++程序也成功了。
请高手帮忙!!!
...全文

相关推荐

评论 6
收藏 已收藏
分享
返回顶部
rabbitjerry
C++ 语言 65,214 成员 250,514 内容