[英]friend member function can't access private member data
我嘗試使用友元函數訪問類 X 的私有成員數據,該友元函數本身是類 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 {
public:
void func(X x1);
};
class X {
int foo;
public:
friend void A::func(X x1);
};
void A::func(X x1) { x1.foo = 999; }
還有一個你忽略的錯誤。 即:
錯誤:“A”尚未聲明
您需要先使用該函數聲明類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; }
您必須在類 X 之前定義類 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; }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.