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为友元函数了,这应该怎么解决?还有为什么会出现这问题? 展开
#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为友元函数了,这应该怎么解决?还有为什么会出现这问题? 展开
3个回答
展开全部
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;
}
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;
}
展开全部
#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;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
友元函数 :
友元函数是可以直接访问类的私有成员的非成员函数。它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明,声明时只需在友元的名称前加上关键字friend,其格式如下:
friend 类型 函数名(形式参数);
友元函数的声明可以放在类的私有部分,也可以放在公有部分,它们是没有区别的,都说明是该类的一个友元函数。
一个函数可以是多个类的友元函数,只需要在各个类中分别声明。
友元函数的调用与一般函数的调用方式和原理一致。
友元函数是可以直接访问类的私有成员的非成员函数。它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明,声明时只需在友元的名称前加上关键字friend,其格式如下:
friend 类型 函数名(形式参数);
友元函数的声明可以放在类的私有部分,也可以放在公有部分,它们是没有区别的,都说明是该类的一个友元函数。
一个函数可以是多个类的友元函数,只需要在各个类中分别声明。
友元函数的调用与一般函数的调用方式和原理一致。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询