我有两个私有嵌套类需要访问另一个类中的私有成员。我想在访问的类中将需要访问私有成员的类作为朋友,但是我收到的错误是A :: m_nData是私有的,所以我无法访问它。无论如何告诉编译器我需要访问D :: DoSomething()中的A :: m_nData私有成员吗?
以下是我正在尝试做的一个示例:
档案 A.h
class A
{
class D;
public:
A();
~A() {}
private:
friend class D;
int m_nData;
};
文件 A.cpp:
#include "A.h"
#include "B.h"
A::A()
: m_nData(0)
{
}
文件 B.h:
#include "A.h"
class B
{
public:
B() {}
~B() {}
private:
class C
{
public:
C(A* pA): m_pA(pA) {}
virtual ~C() {}
virtual void DoSomething() {}
protected:
A* m_pA;
};
class D: public C
{
public:
D(A* pA): C(pA) {}
virtual ~D() {}
virtual void DoSomething()
{
m_pA->m_nData++;
};
};
};
答案 0 :(得分:1)
您需要两个友谊。一个让A
了解私有B::D
,让另一个让B::D
访问私有数据{{1} }。
在声明A类之前声明(包括)B类。
然后在A
中添加:
class B
这允许A类了解私人friend class A;
。
然后在B::D
中,替换:
class A
使用:
friend class D;