C++例程出错,难道是我抄错了?

来源:百度知道 编辑:UC知道 时间:2024/06/08 04:50:04
#include <iostream>
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.getline(num.areaCode,4);
input.ignore(2);
input.getline(num.exchange,4);
input.ignore();
input.getline(num.line,5);

return input;
}
int main()
{

改2个地方

我用VC的编译器试了下
首先
你把#include <iostream>
using namespace std;
这一句改成#include <iostream.h>
因为有的C++编译系统没有完全实现C++标准,它所提供的不后缀.h的头文件不支持把成员函数重载为友元函数

然后你有个友元函数在申明时为
friend istream &operator >> (istream &,PhoneNumber &);

但是你在写具体操作时候写成了
friend istream &operator << (istream &,PhoneNumber &);
把这两个地方改了试试吧

char line[5],这个成员是类PhoneNumber的私有成员变量,所以,你不能用num.line访问它。。。。

名称空间(namespace)冲突。

删除using namespace std;

并在原处添加
using std::cout;
using std::cin;
using std::endl;
using std::ostream;
using std::istream;

另:你的main函数里应该是写错了,第一个cout后面不需要<<phone<<endl;
input.ignore();用了反而错了吧?不过编译器不同可能不一样。

换个编译器试试~