簡體   English   中英

初始化包含數組的類的靜態成員嗎​​?

[英]Initialize a static member of a class that includes an array?

我有一個帶有靜態數據成員的C ++類,該成員是一個常量。 我在類定義中添加了一個數組,現在嘗試初始化靜態成員時出現錯誤。

這是代碼:

class MyClass
{

int i1;
int i2;
int i3;
//bool b1[2];
//bool b2[2];

public:
    //Constructors
    MyClass();
    MyClass(const int i1In, const int i2In, const int i3In
        /*, const bool b1In[2], const bool b2In[2]*/
        );
// Copy constructor
MyClass(const Input& rhs);

// Destructor
~MyClass();

// Assignment
MyClass& operator=(const MyClass& rhs);

// Operators
bool operator==(const MyClass& m2) const;
bool operator!=(const MyClass& m2) const;
MyClass& operator++(int/*serves no purpose, but must be included*/);

static const MyClass S;
};

const MyClass S = { 0, 0, 0 /*,{ false,false }, { false,false }*/ };

上面的代碼編譯沒有錯誤,並且S的值符合預期。 但是,當我更改類定義以添加數組b1b2 (取消注釋類defn中的兩個位置並在S初始化中添加兩個數組初始化器)時,出現錯誤

“ C2440:'正在初始化':無法從'初始化列表'轉換為'MyClass'注意:沒有構造函數可以采用源類型,否則構造函數重載解析不明確”。

定義具有指示值的MyClass類型的常量變量的正確方法是什么?

Windows 7 Pro,Visual Studio 2015

讓構造函數通過常量引用獲取數組參數。

MyClass(/*...*/ const bool (&b1In)[2], const bool (&b2In)[2])

const MyClass MyClass::S(/*...*/ { false,false }, { false,false } );

數組為參數的語法實際上只是一個巧妙偽裝的指針,這就是為什么它不起作用。

另外,您的operator++(int)返回一個引用。 因為那是后遞增運算符,所以它應該按值返回。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM