c++中,为什么友元函数访问不了private成员?

我的程序如下:#include<iostream>usingnamespacestd;classB;classA{private:inta;intb;public:fri... 我的程序如下:
#include<iostream>
using namespace std;
class B;
class A
{
private:
int a;
int b;
public:
friend void display(A &t);
A()
{
a = 5;
b = 8;
}
};

class B
{
private:
int a;
int b;
public:
B();
void display(A &t);
};

B::B()
{
a = 1;
b = 2;
}
void B::display(A &t)
{
cout << t.a << endl << t.b << endl;
cout << a << endl << b << endl;
}
int main()
{
class A a1;
class B b1;
b1.display(a1);
system("PAUSE");
return 0;
}

我是用vs2013的,但是就是在display函数体中的 cout << t.a << endl << t.b << endl;通过不了编译,提示说“ error C2248: “A::b”: 无法访问 private 成员(在“A”类中声明) ”,诸如此类的。

但我明明已经在A类定义中声明display为友元函数了,这应该怎么解决?还有为什么会出现这问题?
展开
 我来答
笃侠6A
推荐于2018-03-04 · TA获得超过3734个赞
知道大有可为答主
回答量:3205
采纳率:75%
帮助的人:3254万
展开全部
A,B类的定义顺序需要交换一下,另外,A类中的
friend void display(A &t);

需要改为
friend void B::display(A &t);

整个代码改正这样试试:

#include<iostream>
using namespace std;
class A;
class B
{
private:
int a;
int b;
public:
B();
void display(A &t);
};

class A
{
private:
int a;
int b;
public:
friend void B::display(A &t);
A()
{
a = 5;
b = 8;
}
};

B::B()
{
a = 1;
b = 2;
}
void B::display(A &t)
{
cout << t.a << endl << t.b << endl;
cout << a << endl << b << endl;
}
int main()
{
class A a1;
class B b1;
b1.display(a1);
system("PAUSE");
return 0;
}
xiarl
推荐于2016-11-26 · TA获得超过1460个赞
知道小有建树答主
回答量:884
采纳率:85%
帮助的人:251万
展开全部

#include<iostream>
using namespace std;
class A;//change

class B
{
private:
int a;
int b;
public:
B();
void display(A &t);
};

class A
{
private:
int a;
int b;
public:
friend void B::display(A &t);//add B::
A()
{
a = 5;
b = 8;
}
};


B::B()
{
a = 1;
b = 2;
}
void B::display(A &t)
{
cout << t.a << endl << t.b << endl;
cout << a << endl << b << endl;
}
int main()
{
class A a1;
class B b1;
b1.display(a1);
system("PAUSE");
return 0;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kaixingui2012
2015-04-28 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6383万
展开全部
友元函数 :
友元函数是可以直接访问类的私有成员的非成员函数。它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明,声明时只需在友元的名称前加上关键字friend,其格式如下:
friend 类型 函数名(形式参数);

友元函数的声明可以放在类的私有部分,也可以放在公有部分,它们是没有区别的,都说明是该类的一个友元函数。
一个函数可以是多个类的友元函数,只需要在各个类中分别声明。
友元函数的调用与一般函数的调用方式和原理一致。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式