Простой 3D-массив С++

Я новичок в С++, и я пытаюсь создать простой статический 3-мерный массив, а затем распечатать его на консоли.

Вот мой текущий код:

#include <iostream>
using namespace std;

int main()
{
  const int MAX_ROW = 2;
  const int MAX_COL = 2;
  const int MAX_HEIGHT = 2;

  int MyArray[MAX_ROW][MAX_COL][MAX_HEIGHT] = { {1,1},
                           {2,10},
                           {3,15},
                           {4,20},
                           {5,25},
                           {6,30},
                           {7,35},
                           {8,40} };

  for(int Row = 0; Row < MAX_ROW; ++Row)
  {
   for(int Col =0; Col < MAX_COL; ++Col)
   {
    for(int Height = 0; Height < MAX_HEIGHT; ++Height)
     {
      cout << "Integer["<< Row << "][" << Col << "][" << Height << "] = " << MyArray[MAX_ROW][MAX_COL][MAX_HEIGHT] << endl;
     }
    }
   }



  return 0;
}

При компиляции компилятор уведомляет меня о том, что "error: too many initializers for ‘int [2][2][2]"

Другие вопросы использовали указатели, с которыми я не знаком.

Заранее благодарю вас!

Изменить: Синтаксис неверен, поэтому я скорректировал его с соответствующим соответствующим кодом, как показано ниже. Теперь в выводе программы каждое пространство массива равно 32767. Полное целое пространство вместо назначенных значений. Может ли кто-нибудь обратиться к этому в ответ? Я не изменил код, кроме моей инициализации массива.

Ответ 1

Измените код следующим образом. Вы можете видеть, что есть две группы, содержащие два набора, каждый из которых имеет два элемента.

 int MyArray[MAX_ROW][MAX_COL][MAX_HEIGHT] = { 
                                               { {1,1},{2,10} }, 
                                               { {4,20},{5,25} } 
                                             };

Взгляните в следующем примере, чтобы сделать его более понятным.

  int arr[2][3][4] = { 
                       { {1, 2, 3, 4}, {1, 2, 3, 4}, {1, 2, 3, 4} },
                       { {1, 2, 3, 4}, {1, 2, 3, 4}, {1, 2, 3, 4} } 
                     };

Как вы можете видеть, есть две группы, каждая из которых содержит три группы из 4 чисел.

Ответ 2

Ваш синтаксис неверен.

int a[2][2][3] = {     // Initialize entire variable
  {                    //   1 of 2 (leftmost array)
    { 1, 2, 3 },       //     1 of 2 (inner array)
    { 4, 5, 6 },       //     2 of 2 (inner array)
  },

  {                    // 2 of 2 (leftmost array)
    { 7, 8, 9 },       //     1 of 2 (inner array)
    { 10, 11, 12 },    //     2 of 2 (inner array)
  },
}

То, что вы показали, будет int [8][2].

Ответ 3

Объявляйте массив 2x2x2, но определяя его как массив 2x8.

Кроме того, когда вы печатаете содержимое своего массива, вы используете MAX_ * в качестве индексов вместо ваших переменных цикла.

#include <iostream>

int main()
{
    const int MAX_ROW = 2;
    const int MAX_COL = 2;
    const int MAX_HEIGHT = 2;

    int MyArray[MAX_ROW][MAX_COL][MAX_HEIGHT] = {
        {
            {1,1}, {1,-1}
        },
        {
            {2,10}, {2,-10}
        }
    };

    for(int Row = 0; Row < MAX_ROW; ++Row)
        for(int Col =0; Col < MAX_COL; ++Col)
            for(int Height = 0; Height < MAX_HEIGHT; ++Height)
                std::cout << "Integer["<< Row << "][" << Col << "][" << Height << "] = " << MyArray[MAX_ROW][MAX_COL][MAX_HEIGHT] << std::endl;


  return 0;
}

Ответ 4

массив MyArray[MAX_ROW][MAX_COL][MAX_HEIGHT] может содержать только 2 * 2 * 2 = 8 элементов, но

{ {1,1},
                           {2,10},
                           {3,15},
                           {4,20},
                           {5,25},
                           {6,30},
                           {7,35},
                           {8,40} };

имеет 16 элементов. поэтому слишком много инициализаторов

Ответ 5

Помимо неправильной инициализации массива, как указывали другие, вы также имеете ошибку при печати. Вы всегда печатаете тот же самый элемент, который даже не существует (это поведение undefined).

cout << "Integer["<< Row << "][" << Col << "][" << Height << "] = " << MyArray[Row][Col][Height] << endl;