繁体   English   中英

C ++:构造函数中的多维数组初始化

[英]C++: multidimensional array initialization in constructor

我想在C ++中使用一个常量大小的二维数组作为类成员。 我在构造函数中初始化它时遇到问题。

以下是我的非工作尝试:

1.)

class A {
 public:
  int a[2][2];
  A();
};

A::A() {
a = {{1,2},{2,4}};
}

yield: error: assigning to an array from an initializer list

2.)

class A {
 public:
  int a[2][2];
  A();
};

A::A() {
int b[2][2] = {{1,2},{2,4}};
a = b;
}

yield: invalid array assignment

3.)

class A {
 public:
  int **a;
  A();
};

A::A() {
int b[2][2] = {{1,2},{2,4}};
a = b;
}

yield: cannot convert 'int [2][2]' to 'int**' in assignment

我来自C背景。 我知道我可以使用std::vector而且我知道这种方法的缺点但是因为这是我的练习,我想知道如何使用普通数组。 我应该补充一点,我想稍后在这个数组上工作。 我想更改存储的值而不是大小。 也许这也很重要(我认为在正确的位置使用const可能会有所帮助?)。

如果您有C ++ 11,则可以在构造函数定义中使用此语法:

A() : a{{1,2}, {3, 4}} {}

如果你没有C ++ 11,你将需要坚持邪恶的旧方法:

A() {
  a[0][0] = 1;
  // etc
}

第一个示例还使用构造函数init-list,它应始终用于初始化成员,而不是在构造函数体中初始化它们。

试试这个,它适用于二维数组(在标准C ++中):

 class A {
 public:
  int a[2][2];
  A();
};


typedef struct{ int a[4]; } array_t;

A::A() {

 int at[2][2] = {{1,2},{2,4}};

*(array_t*)a = *(array_t*)at;

}

Ciao Angelo

构造函数中的各种多维数组通过示例:

// int array1[1];
A() : array1{0} {}

// int array2[2][2];
A() : array2{{0}} {}

// int array3[3][3][3];
A() : array3{{{0}}} {}

您的第一个变体非常接近正确的C ++ 11语法:

A::A()
    : a{{1,2},{2,4}}
{
}

为了补充以前的答案(你们这么快):

正如编译器所说,你在第1和第2例中尝试做的是array assignment ,不允许这样做;

但是我想提请你注意你的第三个案例,这是一个严重的误解,特别是来自你所说的C

分配给a指针的局部变量?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM