| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1230 人关注过本帖
标题:[求助]给类加个友元输出操作符,怎么编译说不能访问私有成员?
只看楼主 加入收藏
华龙
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2007-4-3
收藏
 问题点数:0 回复次数:11 
[求助]给类加个友元输出操作符,怎么编译说不能访问私有成员?
#include <iostream>
class student
{
public:
student(){}
student(const std::string &name,char &c,unsigned &age):stdname(name),sex(c),stdage(age){}
friend std::ostream &operator<<(std::ostream &,const student &);
~student(){}
private:
std::string stdname;
char sex;
unsigned stdage;
};
std::ostream &operator>>(std::istream &os,const student &std)
{
os<<std.stdname<<' '<<std.sex<<' '<<std.stdage;
return os;
}
int main()
{
student st("zhangjiao",'m',21);
std::cout<<st<<std::endl;
return 0;
}
搜索更多相关主题的帖子: std 操作符 student 成员 
2007-05-04 12:53
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
vc++6.0 bug!

Fight  to win  or  die...
2007-05-04 13:24
华龙
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2007-4-3
收藏
得分:0 
那怎么办?
换IDE?
2007-05-04 14:08
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 

Fight  to win  or  die...
2007-05-04 15:01
华龙
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2007-4-3
收藏
得分:0 
谢谢楼各位了啊!
2007-05-04 16:27
华龙
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2007-4-3
收藏
得分:0 
以下是引用aipb2007在2007-5-4 15:01:10的发言:
http://bbs.bc-cn.net/viewthread.php?tid=133743&extra=&page=10#112525


看看这帖子

怎么我该掉了还是不行?

2007-05-04 16:38
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
开始么看你代码,错误还真多!

[CODE]#include <iostream>
#include <string> //你用了string
class student
{
public:
student(){}
student(const std::string &name,char c,unsigned int age):stdname(name),sex(c),stdage(age){}//内置类型最
//好不用引用,年龄该unsigned int吧

friend std::ostream &operator<<(std::ostream &,const student &);
~student(){}
private:
std::string stdname;
char sex;
unsigned int stdage;//还有这里
};
std::ostream &operator<<(std::ostream &os,const student &std)//最严重,你重载的是<<怎么变成>>,是ostream
//不是istream

{
os<<std.stdname<<' '<<std.sex<<' '<<std.stdage;
return os;
}
int main()
{
student st("zhangjiao",'m',21);
std::cout<<st<<std::endl;
return 0;
}[/CODE]

Fight  to win  or  die...
2007-05-04 17:06
华龙
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2007-4-3
收藏
得分:0 
以下是引用aipb2007在2007-5-4 17:06:55的发言:
开始么看你代码,错误还真多!

[CODE]#include <iostream>
#include <string> //你用了string
class student
{
public:
student(){}
student(const std::string &name,char c,unsigned int age):stdname(name),sex(c),stdage(age){}//内置类型最
//好不用引用,年龄该unsigned int吧

friend std::ostream &operator<<(std::ostream &,const student &);
~student(){}
private:
std::string stdname;
char sex;
unsigned int stdage;//还有这里
};
std::ostream &operator<<(std::ostream &os,const student &std)//最严重,你重载的是<<怎么变成>>,是ostream
//不是istream

{
os<<std.stdname<<' '<<std.sex<<' '<<std.stdage;
return os;
}
int main()
{
student st("zhangjiao",'m',21);
std::cout<<st<<std::endl;
return 0;
}[/CODE]

真是太感谢你啦!
那这种方式里面要用字符串岂不是非要要C风格的?

2007-05-04 19:37
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 

在c++里,字符串用的string类类型。
但是也兼容c风格字符串,是char[]类型,c风格字符串在末尾追加空字符'\0'。

两者可以混用!


Fight  to win  or  die...
2007-05-04 20:08
华龙
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2007-4-3
收藏
得分:0 
以下是引用aipb2007在2007-5-4 20:08:35的发言:

在c++里,字符串用的string类类型。
但是也兼容c风格字符串,是char[]类型,c风格字符串在末尾追加空字符'\0'。

两者可以混用!

用iostream不能用friend访问private成员,要访问就要iostream.h;用string,加上std::,又说不能访问私有的,如下:
#include <iostream.h>
#include <string>
class student
{
public:
student(){}
student(const std::string &name,char c,unsigned int age):stdname(name),sex(c),stdage(age) {}
friend ostream &operator<<(ostream &,const student &);
~student(){}
private:
std::string stdname;
char sex;
unsigned int stdage;//还有这里
};
ostream &operator<<(ostream &os,const student &std)//最严重,你重载的是<<怎么变成>>,是ostream
//不是istream
{
os<<std.stdname<<' '<<std.sex<<' '<<std.stdage;
return os;
}
int main()
{
student st("zhangjiao",'m',21);
cout<<st<<endl;
return 0;
}
compiling...
4.cpp
D:\VC\MSDev98\MyProjects\4\4.cpp(19) : error C2679: binary '<<' : no operator defined which takes a right-hand operand of type 'const class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' (or there is no acceptable
conversion)
Error executing cl.exe.

4.obj - 1 error(s), 0 warning(s)

2007-05-04 20:26
快速回复:[求助]给类加个友元输出操作符,怎么编译说不能访问私有成员?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017252 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved