友元有关问题

友元问题两个友元类实现互相访问私有数据成员,为何编译出错#include iostreamusingnamespacestdclassB

友元问题
两个友元类实现互相访问私有数据成员,为何编译出错
#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;
}