Home > Enterprise >  Acces private static member variable in namespace from another class C
Acces private static member variable in namespace from another class C

Time:03-06

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.

  • Related