[英]c++ friend function and the private constructor
#include <iostream>
using namespace std;
class A;
class B {
public:
A createA();
};
class A {
private:
A() {
cout << "A Object created" << endl;
}
friend A B::createA();
};
A B::createA() {
A a_obj;
return a_obj;
}
int main(int argc, char* argv[]) {
B b;
A a = b.createA();
}
上面的代碼可以正常工作!
但我有以下問題:-
class A
and class B
but it produced an error saying that A::A()
is inaccessible and trying to access incomplete type class B
Why?friend AB::createA();
時,誰能幫我理解發生了什么? 它是否試圖立即訪問createA()
的定義。這個有問題的部分是B::createA
。
在這里,您正在“進入”類型B
以提取其成員 function createA
。 為此,您需要知道完整的類型B
。 否則,編譯器如何知道在哪里可以找到該成員 function,或者它是否存在?
出於聲明朋友成員 function 的目的,從編譯器實現的嚴格技術角度來看,這不是必需的。 畢竟,此時您不執行任何 function 調用,因此這里沒有什么要解決的。 但這仍然會有問題,因為我也可以寫B::thisfunctiondoesnotexist
代替,編譯器也必須接受它。 因此,該語言選擇要求在您使用::
拉出它的一些內部時事先知道完整類型。
解決此限制的一種簡單方法(例如,如果您需要避免類之間的循環依賴)是將createA
的功能放入免費的 function 而不是成員 function 中。 如果類型僅在該點前向聲明但未定義,則仍然可以聲明依賴於A
和B
的免費 function。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.