友元函数为什么无法访问类中的数据成员?高手指教!

//13.4重载输入和输出流.cpp:定义控制台应用程序的入口点。//#include"stdafx.h"#include<iostream>usingnamespace... // 13.4重载输入和输出流.cpp : 定义控制台应用程序的入口点。//
#include "stdafx.h"
#include<iostream>
using namespace std;
#define M 256
class String
{
friend ostream & operator<<(ostream &output,const String &s);
friend istream & operator>>(istream &input, const String &s);
public:
String(char *m=NULL);
~String();
private:
char *str;
};
String::String(char *m )
{
if(m==NULL)
str=NULL;
else
{
str=new char[strlen(m)+1];
strcpy(str,m);
}
}
String::~String()
{
if(str!=NULL)
delete [] str;
}
ostream & operator<<(ostream &output,const String &s)
{
if(s.str!=NULL)
output<<s.str;
return output;
}
istream & operator>>(istream &input,String & s)
{
char temp[M];
input>>temp;
if(s.str!=NULL)
delete []s.str;
s.str=new char[strlen(temp)+1];
strcpy(s.str,temp);
return input;
}
int main()
{
String s1,s2;
cout<<"please input 2 string:"<<endl;
cin>>s1>>s2;
cout<<"output is:"<<endl;
cout<<"s1--"<<s1<<"s2--"<<s2<<endl;
return 0;
}

错误显示是:cpp(43) : error C2248: “String::str”: 无法访问 private 成员(在“String”类中声明)
cpp(44) : error C2248: “String::str”: 无法访问 private 成员(在“String”类中声明)
45) : error C2248: “String::str”: 无法访问 private 成员(在“String”类中声明)
cpp(46) : error C2248: “String::str”: 无法访问 private 成员(在“String”类中声明)
也就是这块:
if(s.str!=NULL)
delete []s.str;
s.str=new char[strlen(temp)+1];
strcpy(s.str,temp);
可是为啥重载的>>没有提示错误啊?高手指教!
展开
 我来答
wanglixin1001
2012-10-26 · TA获得超过4174个赞
知道大有可为答主
回答量:1758
采纳率:80%
帮助的人:874万
展开全部
原来在声明重载>>的时候:
friend istream & operator>>(istream &input, const String &s);
你用了const String &s,这个const不能要,下面要修改s的值得嘛。
把这个声明里的const删除,程序ok了。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式