如何在C++对象中初始化数组
How to initialize an array in C++ objects
阅读了如何在 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);
}
我得到:
..srcSomething.cpp: In constructor 'Something::Something()':
..srcSomething.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 };
}
这对我来说看起来很时髦,对编译器来说也是如此:
..srcSomething.cpp: In constructor 'Something::Something()':
..srcSomething.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 };
跟:
..srcSomething.cpp:6:20: error: a brace-enclosed initializer is not allowed here before '{' token
..srcSomething.cpp:6:51: sorry, unimplemented: non-static data member initializers
..srcSomething.cpp:6:51: error: 'constexpr' needed for in-class initialization of static data member 'myArray' of non-integral type
我一直在做得很好,学习什么不起作用,但学习什么有效就不那么好了。
那么,如何为类中的数组使用初始化列表{值,值,值}?
一段时间以来,我一直在试图弄清楚如何做到这一点,但非常卡住,我需要为我的应用程序制作许多此类列表。
你需要初始化构造
函数初始化列表中的数组
#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 还添加了对非静态成员变量的内联初始化的支持,但如上述错误消息所述,编译器尚未实现此功能。
除非我弄错了,否则只有在声明期间初始化变量时才允许使用初始值设定项列表 - 因此得名。不能将初始值设定项列表分配给变量,就像在大多数示例中尝试的那样。
在上一个示例中,您尝试向非静态成员添加静态初始化。如果您希望数组成为类的静态成员,可以尝试如下操作:
class Derp {
private:
static int myArray[10];
}
Derp::myArray[] = { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 };
如果要添加类成员,可以尝试使静态数组const
并将其复制到构造函数中的成员数组中。
可以初始化
数组的数组值,大小为 main 函数,如下所示:
Array *arr2 []= {{1, 3, 5, 6, 7},20,5};
相关文章:
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- 在函数内部的声明中初始化数组,并在外部使用它
- 为什么用结构初始化数组需要指定结构名称
- 有没有一种代码密度较低的方法来使用非默认构造函数初始化数组?
- C++使用另一个数组和新值初始化数组
- 初始化数组、"memset"或" {//value} "的最佳方法是什么?
- 在 constexpr 构造函数中初始化数组是否合法?
- 我可以初始化 const 实例,以便我可以将其用作 const 来初始化数组吗?
- 在构造函数中初始化数组
- 是否可以使用函数返回的值初始化数组
- 使用宏使用额外元素初始化数组
- 在循环中显示不同值的初始化数组
- 如何在macOS中的旧扩展clang和gcc编译器中初始化数组和向量
- 使用可变模板列表初始化数组,并放置new
- 使用函数从 Visual Studio 2017 中的 main 创建和初始化数组
- 使用 c++ 中的函数初始化数组
- 这是使用构造函数初始化数组对象的最佳方法吗?
- C++ 使用变量而不是常量表达式初始化数组
- 在初始化列表中初始化数组的更好方法
- 在可变参数模板类中初始化数组