У меня есть два частных вложенных класса, которым нужно будет получить доступ к частному члену в другом классе. Я подумал о том, чтобы поставить класс, который должен получить доступ к частному члену как другу в доступном классе, однако я получаю сообщение об ошибке, что A :: m_nData является приватным, поэтому я не могу получить к нему доступ. В любом случае, сообщая компилятору, что мне нужно получить доступ к частному члену A :: m_nData в D :: DoSomething()?Друг внутри частного вложенного класса
Вот пример того, что я пытаюсь сделать:
Файл Ах
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)
{
}
Файл Bh:
#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++;
};
};
};
Почему должны '' C' и D' быть вложены в 'b'? Какое преимущество вы это понимаете? – ildjarn
@ildjarn: В реальном случае использования A определяет 4 делегата, которые могут быть установлены. B действует как менеджер A. Мне пришлось удалить много кода, но C и D - это оболочка, которая вызывает обратный вызов A, используя указатель A. В приведенном выше примере я изменил их на значение int. – thewalrusnp
Это не ответит, почему они должны быть _nested_ classes ... Почему они вложены внутри 'B'? – ildjarn