[英]C++ friend function of class not able to access the encapsulated class
嗨,我正在嘗試訪問B類的A類私有成員x
下面的代碼顯示了我發現的方式,但是遇到任何建議都會出錯,有助於實現我的目標。 提前致謝
> main.cpp: In member function ‘void B::bfun(A*)’:
main.cpp:19:9: error: invalid use of incomplete type ‘class A’
Aref->x = 1;
^~
main.cpp:11:7: note: forward declaration of ‘class A’
class A;
^
main.cpp:20:11: error: ‘x’ was not declared in this scope
cout<<x;
^
碼:
#include <iostream>
using namespace std;
class A;
class B{
private:
public:
void bfun (A* Aref);
};
void B::bfun(A* Aref)
{
Aref->x = 1;
cout<<x;
}
class A{
private:
int x;
B b_obj;
public:
void afun();
friend void B::bfun(A*);
};
void A::afun()
{
x=0;
b_obj.bfun(this);
}
int main()
{
printf("Hello World");
A aobj;
aobj.afun();
return 0;
}
列出的錯誤與允許訪問朋友無關; 這是關於什么是不完整類型的實現,這歸因於您如何為類聲明和成員實現訂購代碼。 在正確的類A
聲明之后將代碼更改為B::bfun
解決該問題。
#include <iostream>
class A;
class B
{
private:
public:
void bfun (A* Aref);
};
class A{
private:
int x;
B b_obj;
public:
void afun();
friend void B::bfun(A*);
};
void B::bfun(A* Aref)
{
Aref->x = 1;
std::cout<< Aref->x << '\n' ;
}
void A::afun()
{
x=0;
b_obj.bfun(this);
}
int main()
{
A aobj;
aobj.afun();
return 0;
}
輸出量
1
由於x不是B的直接成員,但是無論如何您都可以通過A來訪問它,因此應該這樣寫:
void B::bfun(A* Aref)
{
Aref->x = 1;
std::cout<< Aref->x << '\n' ;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.