好友成员函数无法访问私有成员数据
friend member function can't access private member data
我尝试访问 class X 的私有成员数据,使用友元函数,它本身是 class A 的成员函数。
这是代码:
class X {
int foo;
public:
friend void A::func(X x1);
};
class A {
public:
void func(X x1) { x1.foo = 999; }
};
这不会编译,原因是:
Error C2248 'X::foo': cannot access private member declared in class 'X'
我尝试更改顺序,在 X 之前声明 A,但没有帮助..
这是什么原因造成的?
您必须在 class X 之前定义 class A,例如
class X;
class A {
public:
void func(X x1);
};
class X {
int foo;
public:
friend void A::func(X x1);
};
void A::func(X x1) { x1.foo = 999; }
或者代替前向声明
class X;
您可以使用详细的类型说明符,例如
class A {
public:
void func(class X x1);
};
class X {
int foo;
public:
friend void A::func(X x1);
};
void A::func(X x1) { x1.foo = 999; }
您忽略了另一个错误。即:
error: 'A' has not been declared
您需要先用函数声明 class A
,然后才能在 X
中将其作为好友引用。但是函数需要一个X
,所以你还需要先声明X
!
它应该看起来像:
class X;
class A {
public:
void func(X x1);
};
class X {
int foo;
public:
friend void A::func(X x1);
};
void A::func(X x1) { x1.foo = 999; }
你必须正确拆分声明和定义,因为你有循环依赖:
class X;
class A {
public:
void func(X x1);
};
class X {
int foo;
public:
friend void A::func(X x1);
};
void A::func(X x1) { x1.foo = 999; }
我尝试访问 class X 的私有成员数据,使用友元函数,它本身是 class A 的成员函数。
这是代码:
class X {
int foo;
public:
friend void A::func(X x1);
};
class A {
public:
void func(X x1) { x1.foo = 999; }
};
这不会编译,原因是:
Error C2248 'X::foo': cannot access private member declared in class 'X'
我尝试更改顺序,在 X 之前声明 A,但没有帮助..
这是什么原因造成的?
您必须在 class X 之前定义 class A,例如
class X;
class A {
public:
void func(X x1);
};
class X {
int foo;
public:
friend void A::func(X x1);
};
void A::func(X x1) { x1.foo = 999; }
或者代替前向声明
class X;
您可以使用详细的类型说明符,例如
class A {
public:
void func(class X x1);
};
class X {
int foo;
public:
friend void A::func(X x1);
};
void A::func(X x1) { x1.foo = 999; }
您忽略了另一个错误。即:
error: 'A' has not been declared
您需要先用函数声明 class A
,然后才能在 X
中将其作为好友引用。但是函数需要一个X
,所以你还需要先声明X
!
它应该看起来像:
class X;
class A {
public:
void func(X x1);
};
class X {
int foo;
public:
friend void A::func(X x1);
};
void A::func(X x1) { x1.foo = 999; }
你必须正确拆分声明和定义,因为你有循环依赖:
class X;
class A {
public:
void func(X x1);
};
class X {
int foo;
public:
friend void A::func(X x1);
};
void A::func(X x1) { x1.foo = 999; }