私有嵌套类中的朋友

时间:2012-01-06 15:28:08

标签: c++ nested friend

我有两个私有嵌套类需要访问另一个类中的私有成员。我想在访问的类中将需要访问私有成员的类作为朋友,但是我收到的错误是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++;
                };
        };
};

1 个答案:

答案 0 :(得分:1)

您需要两个友谊。一个让A了解私有B::D,让另一个让B::D访问私有数据{{1} }。

在声明A类之前声明(包括)B类。

然后在A中添加:

class B

这允许A类了解私人friend class A;

然后在B::D中,替换:

class A

使用:

friend class D;