阅读How to initialize an array in C之后,特别是:
但是,不要忽视明显的解决方案:int myArray [10] = {5,5,5,5,5,5,5,5,5,5};
我试过这样的事情:
#include <iostream>
class Something {
private:
int myArray[10];
public:
Something() {
myArray[10] = { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 };
}
int ShowThingy(int what) {
return myArray[what];
}
~Something() {}
};
int main () {
Something Thing;
std::cerr << Thing.ShowThingy(3);
}
我得到了:
..\src\Something.cpp: In constructor 'Something::Something()':
..\src\Something.cpp:10:48: error: cannot convert '<brace-enclosed initializer list>' to 'int' in assignment
在这种情况下显而易见的并不那么明显。我真的希望我的阵列的启动也更具动态性。
我累了:
private:
int * myArray;
public:
Something() {
myArray = new int [10];
myArray = { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 };
}
对我来说这看起来很时髦,编译器也是如此:
..\src\Something.cpp: In constructor 'Something::Something()':
..\src\Something.cpp:11:44: error: cannot convert '<brace-enclosed initializer list>' to 'int*' in assignment
这也行不通:
private:
int myArray[10] = { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 };
使用:
..\src\Something.cpp:6:20: error: a brace-enclosed initializer is not allowed here before '{' token
..\src\Something.cpp:6:51: sorry, unimplemented: non-static data member initializers
..\src\Something.cpp:6:51: error: 'constexpr' needed for in-class initialization of static data member 'myArray' of non-integral type
我一直做得非常好,学习什么不起作用,但不太好学习什么工作。
那么,我如何在类中使用初始化列表{value,value,value}?
我一直试图弄清楚如何做一段时间并且非常困难,我需要为我的应用程序制作一些这样的列表。
答案 0 :(得分:20)
您需要在构造函数初始化列表中初始化数组
#include <iostream>
class Something {
private:
int myArray[10];
public:
Something()
: myArray { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }
{
}
int ShowThingy(int what) {
return myArray[what];
}
~Something() {}
};
int main () {
Something Thing;
std::cerr << Thing.ShowThingy(3);
}
.. \ src \ Something.cpp:6:51:抱歉,未实现:非静态数据成员初始值设定项
C ++ 11还增加了对非静态成员变量的内联初始化的支持,但是正如上面的错误消息所述,你的编译器还没有实现它。
答案 1 :(得分:1)
除非我弄错了,否则初始化列表仅在声明期间初始化变量时允许 - 因此名称。您无法将初始化列表分配给变量,正如您在大多数示例中尝试的那样。
在上一个示例中,您尝试将静态初始化添加到非静态成员。如果你想让数组成为类的静态成员,你可以尝试这样的事情:
class Derp {
private:
static int myArray[10];
}
Derp::myArray[] = { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 };
如果要添加类成员,可以尝试创建静态数组const
并将其复制到构造函数中的成员数组中。