14

在阅读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}?

一段时间以来,我一直试图弄清楚如何做到这一点,并且非常卡住,我需要为我的应用程序制作许多此类列表。

4

2 回答 2

26

需要在构造函数初始化列表中初始化数组

#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 also adds supports for inline initialization of non-static member variables, but as the above error message states, your compiler has not implemented this yet.

于 2012-05-22T01:37:19.133 回答
1

除非我弄错了,否则只有在声明期间初始化变量时才允许使用初始化列表——因此得名。您不能将初始化列表分配给变量,就像您在大多数示例中所做的那样。

在上一个示例中,您尝试将静态初始化添加到非静态成员。如果您希望数组成为该类的静态成员,您可以尝试以下操作:

class Derp {
private:
    static int myArray[10];
}

Derp::myArray[] = { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 };

如果要添加类成员,可以尝试制作静态数组const并将其复制到构造函数中的成员数组中。

于 2012-05-22T01:34:08.360 回答