首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C++对象中初始化数组

如何在C++对象中初始化数组
EN

Stack Overflow用户
提问于 2012-05-22 01:27:09
回答 3查看 80.6K关注 0票数 16

在阅读How to initialize an array in C之后,特别是:

不过,

不要忽视显而易见的解决方案:

int myArray10 ={ 5,5,5,5,5,5,5,5,5 };

我试过这样的方法:

代码语言:javascript
复制
#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);
}

我得到了:

代码语言:javascript
复制
..\src\Something.cpp: In constructor 'Something::Something()':
..\src\Something.cpp:10:48: error: cannot convert '<brace-enclosed initializer list>' to 'int' in assignment

在这种情况下,显而易见的情况并不那么明显。我真的很希望我的数组能更有活力。

我累了:

代码语言:javascript
复制
private:
    int * myArray;

public:
    Something() {
            myArray = new int [10];
            myArray = { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 };
}

这在我看来很时髦,在编译器看来也是如此:

代码语言:javascript
复制
..\src\Something.cpp: In constructor 'Something::Something()':
..\src\Something.cpp:11:44: error: cannot convert '<brace-enclosed initializer list>' to 'int*' in assignment

这也不起作用:

代码语言:javascript
复制
private:
int myArray[10] = { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 };

通过以下方式:

代码语言:javascript
复制
 ..\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}?

一段时间以来,我一直在努力弄清楚如何做到这一点,现在我陷入了困境,我需要为我的应用程序做一些这样的列表。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-22 01:37:19

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

代码语言:javascript
复制
#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还添加了对非静态成员变量内联初始化的支持,但是由于上面的错误消息状态,您的编译器还没有实现这一点。

票数 27
EN

Stack Overflow用户

发布于 2012-05-22 01:34:08

除非我弄错了,否则只允许在声明期间初始化变量时才允许初始化程序列表--因此可以使用名称。您不能像在大多数示例中所做的那样,将初始化程序列表赋值给变量。

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

代码语言:javascript
复制
class Derp {
private:
    static int myArray[10];
}

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

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

票数 1
EN

Stack Overflow用户

发布于 2022-04-14 05:53:43

可以按大小初始化数组的数组值,主要函数如下:

代码语言:javascript
复制
Array *arr2 []= {{1, 3, 5, 6, 7},20,5};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10694689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档