繁体   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