JOG-Design
JOG-Design

Reputation: 207

Simple 3D Array C++

I am a novice in C++ and I am trying to create a simple static 3 Dimensional Array and then print it out in console.

Here is my current code:

#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;
}

When I compile the compiler notifies me stating "error: too many initializers for ‘int [2][2][2]"

Other questions have used pointers which I am not familiar with.

Thank you in advance!

Edit: The syntax is wrong so I have corrected it with the correct corresponding code as answered below. Now in the output of the program each array space is 32767. A full integer space instead of the assigned values. Can anybody address this in their answer? I have not changed any code except my initialisation of the array.

Upvotes: 14

Views: 39103

Answers (5)

Sopel
Sopel

Reputation: 1219

Apart from wrong array initialization as others have pointed out you also have an error in printing. You always print the same element that doesn't even exist (which is undefined behaviour).

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

Upvotes: 0

micheal.yxd
micheal.yxd

Reputation: 128

you array MyArray[MAX_ROW][MAX_COL][MAX_HEIGHT] only can hold 2*2*2=8 elements, but

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

has 16 elements. so there are too many initializers

Upvotes: 0

Jonathon Reinhart
Jonathon Reinhart

Reputation: 137527

Your syntax is wrong.

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)
  },
}

What you've shown would be an int [8][2].

Upvotes: 9

Oragon Efreet
Oragon Efreet

Reputation: 1134

Your declare a 2x2x2 array, but defining it as a 2x8 array.

Also, when you print the content of your array, you use MAX_* as indexes instead of your loop variables.

#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;
}

Upvotes: 0

Vallabh Patade
Vallabh Patade

Reputation: 5110

Change the code as per following. You can see there are 2 groups containing two tuples each having two elements in it.

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

Have a look in following example to make it more clear

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

As you can see, there are two groups, each containing three groups of 4 numbers.

Upvotes: 6

Related Questions