为什么我收到错误 'cannot access private member declared in class',即使我已经声明了 friend class

Why am I getting the error 'cannot access private member declared in class' even though I have declared friend class

考虑以下代码:

#include <iostream>

template<typename T>
class A
{
    private:
        T value;

    public:
        A(T v){ value = v;}

        friend class A<int>;
};

template<typename T>
class B
{
    public:
        T method(A<T> a){ return a.value; }  // problem here, but why?
};

int main()
{
    A<int> a(2);
    B<int> b;

    std::cout << b.method(a) << std::endl;
}

为什么我仍然收到错误:“'A::value':无法访问在 class 'A' 中声明的私有成员”,即使我已将 A 声明为好友 class 对于模板类型 int?

编辑 请注意,在 B 内移动朋友 class 行也不起作用:

template<typename T>
class A
{
    private:
        T value;

    public:
        A(T v){ value = v; }
};

template<typename T>
class B
{
    public:
    T method(A<T> a){ return a.value; }

    friend class A<int>;
};
#include <iostream>

template<typename T>
class A
{
    private:
        T value;

    public:
        A(T v){ value = v;}
        T getValue() { return value; }


};

template<typename T>
class B
{
    public:
        friend class A<int>;
        T method(A<T> a){ return a.getValue(); } 

};

int main()
{
    A<int> a(2);
    B<int> b;

    std::cout << b.method(a) << std::endl;
}

几乎没有变化。 a.value() value是私有成员变量,所以我们在getValue()下面创建了一个getter,在需要的地方替换。 也把朋友 class A 搬到了 class B.

T method(A<T> a){ return a.value; }

problem here, but why?

因为 class B 正在访问 class Aprivate 成员 value.

template<typename T>
class B;

template<typename T>
class A
{
    private:
        T value;
    public:
        A(T v){ value = v;}
        friend class B<int>;
};

template<typename T>
class B
{
    public:
        T method(A<T> a){ return a.value; }
};

如果想让B使用A的私有属性,classA应该和classB成为朋友。