Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C++: multidimensional array initialization in constructor

I want to use a two dimensional array of constant size as a class member in C++. I have problems initializing it in the constructor though.

Here are my non-working tries:

1.)

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

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

yields: 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;
}

yields: invalid array assignment

3.)

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

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

yields: cannot convert ‘int [2][2]’ to ‘int**’ in assignment

I come from C background. I know that I could use std::vector and I am aware of the disadvantages this approach has but since this is an exercise for me I would like to know how to get it working with plain arrays. I should add that I want to work on this array later on. I want to change the stored values but not the size. Maybe that matters as well (I figured a const at the right place could help somehow?).

like image 828
ravenfrost Avatar asked Apr 09 '14 22:04

ravenfrost


1 Answers

If you have C++11, you can use this syntax in the constructor definition:

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

If you don't have C++11, you will need to stick to the wicked old ways:

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

The first example also uses the constructor init-list, which should always be used to initialize members instead of intializing them in the constructor body.

like image 89
pmr Avatar answered Oct 30 '22 17:10

pmr