初始化包含数组的 class 的静态成员?
Initialize a static member of a class that includes an array?
我有一个 C++ class,它有一个常量静态数据成员。我在 class 定义中添加了一个数组,现在在尝试初始化静态成员时出现错误。
代码如下:
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
的值符合预期。但是,当我更改 class 定义以添加数组 b1
和 b2
(取消注释 class 定义中的两个位置并在 [= 的初始化中添加两个数组初始值设定项12=]), 我得到错误
"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)
return 是一个参考。因为那是 post 递增运算符,所以它应该按值 return。
我有一个 C++ class,它有一个常量静态数据成员。我在 class 定义中添加了一个数组,现在在尝试初始化静态成员时出现错误。
代码如下:
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
的值符合预期。但是,当我更改 class 定义以添加数组 b1
和 b2
(取消注释 class 定义中的两个位置并在 [= 的初始化中添加两个数组初始值设定项12=]), 我得到错误
"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)
return 是一个参考。因为那是 post 递增运算符,所以它应该按值 return。