gpt4 book ai didi

c++ - 初始化包含数组的类的静态成员?

转载 作者:行者123 更新时间:2023-11-30 05:31:29 24 4
gpt4 key购买 nike

我有一个 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 (取消注释类定义中的两个位置并在 S 的初始化中添加两个数组初始值设定项), 我得到了错误

“C2440:‘initializing’:无法从‘initializer list’转换为‘MyClass’ 注意:没有构造函数可以采用源类型,或者构造函数重载解析不明确”。

定义具有指示值的 MyClass 类型常量变量的正确方法是什么?

Windows 7 专业版、Visual Studio 2015

最佳答案

让构造函数通过常量引用获取数组参数。

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

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

数组作为参数的语法实际上只是一个巧妙伪装的指针,这就是它不起作用的原因。

此外,您的operator++(int) 返回一个引用。因为那是后自增运算符,所以它应该按值返回。

关于c++ - 初始化包含数组的类的静态成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35540259/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com