[英]Static initialization of a struct with class members
我有一個結構,它使用大量的vanilla char*
指針定義,但也是一個對象成員。 當我嘗試靜態初始化這樣的結構時,我得到編譯器錯誤。
typedef struct
{
const char* pszA;
// ... snip ...
const char* pszZ;
SomeObject obj;
} example_struct;
// I only want to assign the first few members, the rest should be default
example_struct ex = { "a", "b" };
SomeObject
有一個沒有參數的公共默認構造函數,所以我不認為這會是一個問題。 但是當我嘗試編譯它(使用VS)時,我收到以下錯誤:
error C2248: 'SomeObject::SomeObject' : cannot access private member declared in class 'SomeObject'
知道為什么嗎?
更新:這是SomeObject的定義
class SomeObject
{
void operator=(const SomeObject&);
SomeObject(const SomeObject&);
public:
SomeObject()
{
// etc
}
// members snipped
}
ex
的初始化執行復制初始化 。 它取右邊的值並用它來初始化左邊的變量。 對於類類型成員,使用適當的構造函數。 在您的情況下,這意味着調用SomeObject
的復制構造SomeObject
,但您已將該構造函數SomeObject
私有,因此編譯器在告訴您SomeObject::SomeObject
是無法訪問的私有成員時是正確的。
雖然允許編譯器ex.obj
對復制構造函數的調用並使用默認構造函數直接初始化ex.obj
,但這是一個可選的優化; 它仍然需要被允許調用復制構造函數。
您可以為example_struct
提供自己的構造函數,並使用它來代替大括號初始化,也可以公開SomeObject
的復制構造函數。
其余的成員將初始化為'0',而不是“默認”,對吧? 所以它可能試圖調用SomeObject(0)
,我猜這是解析為私有拷貝構造函數。
看起來SomeObject的構造函數是私有的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.