从另一个 class C++ 访问命名空间中的私有静态成员变量

Acces private static member variable in namespace from another class C++

我有问题。在下面的示例中,在命名空间a 中有一个名为private_b of class A 的静态私有成员变量。然后我试图从 class B 访问该变量,我声明它是 class Afriend,但它没有无法正常工作,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
    }
};

我不明白为什么我无法访问它,以及如何解决这个问题。我真的希望 class A 位于该命名空间内,而 class B 位于该命名空间内没有意义。我在互联网上搜索过这个,但找不到这个确切的案例,或者找不到这个案例的解决方案。

friend class B; 在同一命名空间 a 中与 B 宣布了友谊。你可能想要 friend class ::B;.

注意,friend class B;不是指全局前向声明class B,它在关键字friend.

之后有自己的前向声明class B