I have a problem. In the following example, there is a static private member variable called private_b
of class A
inside namespace a
. And then I'm trying to access that variable from class B
, which I have declared to be a friend
of class A
, but it doesn't work, with a compile error from GCC:
error: ‘B* a::A::private_b’ is private within this context
class B;
namespace a {
class A {
private:
static B* private_b;
friend class B;
};
B* A::private_b = nullptr;
}
class B {
public:
void foo() {
B* foo = a::A::private_b; // Error here
}
};
I don't understand why I can't access it, and how to get around this problem. I really want class A
to be inside that namespace, and class B
doesn't make sense to be inside that namespace. I searched for this on the internet, but couldn't find this exact case, or couldn't find a solution for this case.
CodePudding user response:
friend class B;
declared friendship with B
in the same namespace a
. You may want friend class ::B;
.
Note, friend class B;
does not refer to the global forward declaration class B
, it has own forward declaration class B
after the keyword friend
.