![](/img/trans.png)
[英]how do i initialize a class' private member static map whose value is a struct?
[英]Declare / initialize static member of private nested struct
我有以下示例代碼(在名為A.cpp
的文件中):
class O {
private:
struct S {
int i;
int j;
};
static struct S s;
};
O::S s { 0, 1 };
我在Mac上的命令行中使用g++ -c -std=c++11 A.cpp
編譯,但出現以下錯誤:
A.cpp:11:4: error: 'S' is a private member of 'O'
O::S s { 0, 1 };
^
A.cpp:3:9: note: declared private here
struct S {
^
1 error generated
該問題最初是在Linux機器上的更復雜的代碼中產生的,而該錯誤基本上具有相同的錯誤。 (在“真實”代碼中,類聲明位於標頭中,而不是所有聲明在一個文件中,但是同樣,錯誤是相同的。)
這似乎應該工作。 正如消息所指示的那樣,當然可以將S
聲明為私有的,但僅在私有成員變量s
的上下文中使用它。 這是怎么了?為什么?
編輯:關於如何在C ++中初始化私有靜態成員的聲明重復項? ,明顯的區別是內部類的范圍,而不是一般如何初始化靜態成員變量。
這條線
O::S s { 0, 1 };
嘗試定義O::S
類型的對象::s
。 這不是靜態成員的定義。 那個看起來像這樣:
O::S O::s { 0, 1 };
S類在O的私有部分中聲明,因此O類之外的代碼無法訪問它。 具體來說,您不能在O類之外實例化S類,因為這將構成訪問私有聲明。
如果您希望能夠在類O之外創建S的實例,則應將其聲明為public。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.