1

分为三类:

class A
{
    friend I_B;

    protected:

    void* mData;
};

class I_B
{
    void foo() = 0;
};

class B_Impl : public I_B
{

    B_Impl( A* value )
    :
    mData( value->mData ) <--- ERROR
    {

    }

    void foo() { mData->DoSomething() };

protected:

    void* mData;
};

在编译时,我在构造函数中得到一个错误,即 mData 是受保护的成员。

请解释一下为什么会这样。

我可以使用基类的“友谊”访问受保护的成员吗?

4

1 回答 1

5

友谊不是遗传的。如果你想B_Impl成为你的朋友,A你必须声明B_Impl为朋友。

友谊也不是传递的:你朋友的朋友不一定是你的朋友。

于 2013-08-14T13:06:35.800 回答