Определение B
внутри метода A
не приводит к тому, что экземпляры A
содержат B
.
Независимо от того, где вы определяете класс, вам нужен экземпляр для вызова нестатического метода. Дружить с ними тоже будет недостаточно, потому что вам все еще нужен экземпляр A
, который нужно как-то передать B
:
class A {
protected:
int t = 10;
public:
void f() {
struct B {
void g(A& a) {
int x = a.t;
}
};
B b;
b.g(*this);
}
};