[英]Nested class' access to enclosing class' private data members
我在實現一個嵌套類時遇到了麻煩,該類的構造函數是用一些封閉類的私有數據成員初始化的。
例:
Header File:
class Enclosing {
//...Public members
//...Private members
int x, int y
class Inner; // Declaration for nested class
};
Impl. File:
// Stuff...
class Enclosing::Inner {
explicit Inner() : foo(x), bar(y) // foo and bar are data members of Inner
//...
};
我invalid use of non-static data member
錯誤。 當涉及嵌套類訪問其封閉類的成員時,是否有一些我缺少的東西?
成員x
和y
是Enclosing
非靜態數據成員,這意味着它們只存在於Enclosing
類的具體對象中。 沒有具體的對象, x
和y
都不存在。 同時,您試圖在沒有對象的情況下引用x
和y
。 這是無法完成的,這是編譯器試圖告訴你的。
如果要從x
和y
初始化成員Inner::foo
和Inner::bar
,則必須將Enclosing
類型的具體對象傳遞給Inner
的構造函數。 例如
class Enclosing::Inner {
explicit Inner(const Enclosing& e) : foo(e.x), bar(e.y)
{}
//...
};
額外注意:在原始的C ++ 98中,內部類沒有特殊權限訪問外部類。 使用C ++ 98編譯器,您必須為內部類提供必要的權限(友誼)或將成員x
和y
公開為public。 但是,這種情況在C ++ 98中被歸類為缺陷 ,並且決定內部類應該具有對外部類成員(甚至是私有成員)的完全訪問權限。 因此,您是否必須在訪問權限方面做任何額外的事情取決於您的編譯器。
嵌套類無法訪問封裝類的privet數據成員。如果我們嘗試訪問封閉類的privet成員,則顯示錯誤,它只能訪問封閉類的公共數據成員.....
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.