关于操作符重载的问题

discory 2013-02-18 03:58:36
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
using std::ostream;
using std::istream;

#include <iomanip>
using std::setw;

class PhoneNumber
{
friend ostream &operator <<( ostream&, const PhoneNumber & );
friend istream &operator >>( istream&, const PhoneNumber & );

private:
char areaCode[ 4 ]; //3-digit area code and null
char exchange[ 4 ]; //3-digit exchange and null
char line[ 5 ]; //4-dighit line and null
};

//Overloaded stram-insertion operator( cannot be
//a member function if we would like to invoke it with
//cout << somePhoneNumber; )
ostream &operator <<( ostream &output, const PhoneNumber &num )
{
output << "(" << num.areaCode << ")"
<< num.exchange << "-" << num.line;
return output; //enables cout << a << b << c;
}

istream &operator >>( istream &input, const PhoneNumber &num )
{
input.ignore(); //skip (
input >> setw( 4 ) >> num.areaCode; //这里报错
input.ignore( 2 ); //skip )
input >> setw( 4 ) >> num.exchange; //这里报错
input.ignore(); //skip dash (-)
input >> setw( 5 ) >> num.line; //这里报错
return input; //enables cin >> a >> b >> c;
}

int main()
{
PhoneNumber phone; //create object phone

cout << "Enter phone number in the form (123) 456-7890: \n";

//cin >> phone invokes operator >> function by
//issuing the call operator >>( cin, phone ).
cin >> phone;

//cout << phone invokes operator << function by
//issuing the call operator <<( cout, phone ).
cout << "The phone number entered was: " << phone << endl;
system("pause");
return 0;
}

提示说操作符重载未匹配,不明白
input >> setw( 4 ) >> num.areaCode; //input area code
IntelliSense: 没有与这些操作数匹配的 ">>" 运算符
操作数类型为: std::basic_istream<char, std::char_traits<char>> >> const char [4] d:\ex\25\main.cpp 37 21 25
...全文
180 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
discory 2013-02-18
  • 打赏
  • 举报
回复
哦,明白了,感谢2位大虾
昵称很不好取 2013-02-18
  • 打赏
  • 举报
回复
friend istream &operator >>( istream&, const PhoneNumber & ); 被const打败了
rocktyt 2013-02-18
  • 打赏
  • 举报
回复
istream没有提供从流输入字符数组的重载,可以考虑scanf,当然,要注意缓冲区大小,还有PhoneNumber 里面的字符数组需要初始化一下 scanf("(%3c)%3c-%4c", num.areaCode, num.exchange, num.line); 顺便 friend istream &operator >>( istream&, PhoneNumber & ); const了怎么修改内容?

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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