友元问题
两个友元类实现互相访问私有数据成员,为何编译出错
#include <iostream>
using namespace std;
class B;
class A
{
friend class B;
public:
A(){a=-1;}
int get(){return a;}
void setB(B & Bb){Bb.b=10;}
private:
int a;
};
class B
{
friend class A;
public:
B(){b=0;}
void setA(A& Ademo){Ademo.a=0;}
int get(){return b;}
private:
int b;
};
int main()
{
A Aa;
cout < < Aa.get() < <endl;
B Bb;
Bb.setA(Aa);
cout < < Aa.get() < <endl;
return 0;
}
[解决办法]
你的class A中的void setB(B & Bb){Bb.b=10;}这段程序中Bb.b会出错,因为现在程序还不知道B类中有个int成员,所以你要把setB函数写到后面。参考下面程序:
#include <iostream>
using namespace std;
class B;
class A
{
friend class B;
public:
A(){a=-1;}
int get(){return a;}
void A::setB(B & Bb);
private:
int a;
};
class B
{
friend class A;
public:
B(){b=0;}
void setA(A& Ademo){Ademo.a=0;}
int get(){return b;}
private:
int b;
};
void A::setB(B & Bb){Bb.b=10;}
int main()
{
A Aa;
cout < < Aa.get() < <endl;
B Bb;
Bb.setA(Aa);
cout < < Aa.get() < <endl;
return 0;
}
[解决办法]
http://community.csdn.net/Expert/TopicView3.asp?id=5352099
[解决办法]
象这种情况只要 文件结构组织好一点 就可以了,
把A的定义放在 A.h中,前面加B的前置声明,A的实现 放在A.cpp里面
把B的定义放在 B.h中,前面加A的前置声明,B的实现 放在B.cpp里面
[解决办法]
#include <iostream>
using namespace std;
class B;
class A
{
friend class B;
public:
A(){a=-1;}
int get(){return a;}
void setB(B & Bb);
private:
int a;
};
class B
{
friend class A;
public:
B(){b=0;}
void setA(A& Ademo){Ademo.a=0;}
int get(){return b;}
private:
int b;
};
void A::setB(B &Bb){Bb.b=10;}
int main()
{
A Aa;
cout < < Aa.get() < <endl;
B Bb;
Bb.setA(Aa);
cout < < Aa.get() < <endl;
return 0;
}
友元有关问题
友元问题两个友元类实现互相访问私有数据成员,为何编译出错#include iostreamusingnamespacestdclassB
