为什么我收到错误 '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
A
的 private
成员 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成为朋友。
考虑以下代码:
#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
A
的 private
成员 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成为朋友。