VC++6.0下友元无法访问类private有成员和protected成员

xin8525 2003-08-20 11:38:32
我在VC++6。0下,一个类的的friend成员都无法访问它的私有成员和保护成员
(是从书上抄上去的,但在dev-c++下可以编译通过)?
是不是VC++6。0不支持啊?
...全文
133 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
nirvana_li 2003-09-21
  • 打赏
  • 举报
回复
我听说这个BUG可以在代码中就防止...凭我的记忆是先在类的开始就先要声明友元函数,具体怎么我也记不住了,我在去年的一期<程序员>里面看到过,但具体是那一期我也忘了,faint!!我想应该在VC7.0里面通的过吧,以前我练习写String类的时候也有这个问题,在VC6.0里面怎么也报错,而VC7.0一切OK...faint again...
RookieStar 2003-09-21
  • 打赏
  • 举报
回复
对,你可以照 hangdian(欧阳无敌)的方法试试!
nonocast 2003-09-21
  • 打赏
  • 举报
回复
SP5
hangdian 2003-09-20
  • 打赏
  • 举报
回复
这是编译器发生的问题,你要不去下载一个补丁,或下面方法:
1。将友元提出类外,不要放在类里面。
2.使用名字空间太大你可以写成using std::ostream
nonocast 2003-09-20
  • 打赏
  • 举报
回复
faint
打Sp5才行
微软的东西怎么可能不打补丁呢?
艾,我...
nonocast 2003-09-20
  • 打赏
  • 举报
回复
不仅仅是VC6连VC7也不行!!!
oopig 2003-08-22
  • 打赏
  • 举报
回复
是我犯的一个错误。平时对友元用的少,只凭着记忆就想当然的回答了。
实在是对不起。
这给我一个教训:做事情还是要严谨一些。
Neoking 2003-08-21
  • 打赏
  • 举报
回复
同意 oopig(面向对象的猪) 的说法
oopig 2003-08-21
  • 打赏
  • 举报
回复
一个类的的friend成员无法访问它的私有成员,但是可以访问保护成员和公开成员
zeta999999 2003-08-21
  • 打赏
  • 举报
回复
装sp5
Smartdoggie 2003-08-21
  • 打赏
  • 举报
回复
VC6的BUG
打个SP5应该没事了
Smartdoggie 2003-08-21
  • 打赏
  • 举报
回复
VC6的BUG
打个SP5应该没事了
xin8525 2003-08-21
  • 打赏
  • 举报
回复
感谢ppm07(洁洁白水)的细心回复:
我的代码如下:(在VC6下面编译不过)


#include<iostream>
#include<iomanip>

using namespace std;

class Phone
{
friend ostream& operator<<( ostream&, const Phone & );
friend istream& operator>>( istream&, Phone & );
protected:
char area[4];
char exchange[4];
char line[5];
};


ostream& operator<<( ostream &output, const Phone &num )
{
output<<"("<<num.area<<")"
<<num.exchange<<"-"<<num.line<<endl;

return output;
}


istream& operator>>( istream &input, Phone &num )
{
input.ignore();
input>>setw(4)>>num.area;
input.ignore(2);
input>>setw(4)>>num.exchange;
input.ignore();
input>>setw(4)>>num.line;

return input;
}


int main()
{
Phone phone;
cout<<"Enter phone number in the form(123) 456-7890:\n";
cin>>phone;

cout<<"The phone number entered was :"<<phone<<endl;
system("pause");

return 0;
}
Smartdoggie 2003-08-21
  • 打赏
  • 举报
回复
对啊,
oopig(面向对象的猪)
说说你的理由
ppm07 2003-08-21
  • 打赏
  • 举报
回复
#include <iostream.h>

class A {
friend int geta(A& ca);
friend int getb(A& ca);
friend int getc(A& ca);
public:
A(){ ma=mb=mc=0; }
A( int a,int b, int c ):ma(a), mb(b), mc(c){}
public:
int ma;
private:
int mb;
protected:
int mc;
};

int geta(A& ca){ return ca.ma; }
int getb(A& ca){ return ca.mb; }
int getc(A& ca){ return ca.mc; }

int main()
{
A a;
cout<<geta(a)<<" "<<getb(a)<<" "<<getc(a)<<endl;
A b(4,5,9);
//cout<<b.ma <<b.mb <<b.mc <<endl;
cout<<geta(b)<<" "<<getb(b)<<" "<<getc(b)<<endl;
return 1;
}

这段代码没问题。(vc6.0)
ppm07 2003-08-21
  • 打赏
  • 举报
回复
我试了一下,没问题啊。
楼主把代码贴出来看看。
liuyuw 2003-08-21
  • 打赏
  • 举报
回复
friend可以访问私有成员的!
panther8888 2003-08-21
  • 打赏
  • 举报
回复
我不用VC,但估计应该是一个bug,可以按楼上说的打个补丁试一下,一个类的friend可以访问它的所有成员,包括私有的和保护的.
Smartdoggie 2003-08-21
  • 打赏
  • 举报
回复
一个类的的friend成员无法访问它的私有成员,但是可以访问保护成员和公开成员

??????????????????????????
??????????????????????????
WhatCanIdoing 2003-08-21
  • 打赏
  • 举报
回复
听说是 vc++6.0的bug
加载更多回复(1)

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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