为什么声明的友元函数还是提示不能访问private成员
[code]
template<class T> class A; //B类模板
template<class T>
class B{
friend A<T>;
private:
T data;
};//C类
class C{};//A类模板
template<class T>
class A
{
public:
void Fun()
{
C c;
B<C> x;
x.data = c; //编译错误error C2248: “B<T>::data”: 无法访问 private 成员(在“B<T>”类中声明)
B<int> y;
y.data = 1; //这个正常
}
};int main()
{
A<int> a;
//A a; //如果A改成普通类就不报错
a.Fun();
return 0;
}
[/code]
template<class T> class A; //B类模板
template<class T>
class B{
friend A<T>;
private:
T data;
};//C类
class C{};//A类模板
template<class T>
class A
{
public:
void Fun()
{
C c;
B<C> x;
x.data = c; //编译错误error C2248: “B<T>::data”: 无法访问 private 成员(在“B<T>”类中声明)
B<int> y;
y.data = 1; //这个正常
}
};int main()
{
A<int> a;
//A a; //如果A改成普通类就不报错
a.Fun();
return 0;
}
template<class T>
class B{
friend A<T>;
private:
T data;
};//C类
class C{};//A类模板
template<class T>
class A
{
public:
void Fun()
{
C c;
B<C> x;
x.data = c; //编译错误error C2248: “B<T>::data”: 无法访问 private 成员(在“B<T>”类中声明)
B<int> y;
y.data = 1; //这个正常
}
};int main()
{
A<int> a;
//A a; //如果A改成普通类就不报错
a.Fun();
return 0;
}
class A;//B类模板
template <class T>
class B
{
template<class U>
friend class A;//你之前写的是针对某个类型的友元
private:
T data;
};//C类
class C {};//A类模板
template <class T>
class A
{
public:
void Fun() {
C c;
B <C> x;
x.data = c; //编译错误error C2248: “B <T>::data”: 无法访问 private 成员(在“B <T>”类中声明)
B <int> y;
y.data = 1; //这个正常
}
};int main()
{
A <int> a;
//A a; //如果A改成普通类就不报错
a.Fun();
return 0;
}