user33061
user33061

Reputation: 1885

invalid types 'int[int]' for array subscript

This following code gets this compile error: "invalid types 'int[int]' for array subscript". What should be changed?

#include <iostream>

using namespace std;

int main(){

    int myArray[10][10][10];
    
    for (int i = 0; i <= 9; ++i){
        for (int t = 0; t <=9; ++t){            
            for (int x = 0; x <= 9; ++x){
                for (int y = 0; y <= 9; ++y){

                myArray[i][t][x][y] = i+t+x+y; //This will give each element a value

                      }
                      }
                      }
                      }
    
    for (int i = 0; i <= 9; ++i){
        for (int t = 0; t <=9; ++t){
            for (int x = 0; x <= 9; ++x){
                for (int y = 0; y <= 9; ++y){
                
                cout << myArray[i][t][x][y] << endl;

                    }
                    }
                    }                
                    }
                    
    system("pause");

}

Upvotes: 11

Views: 198882

Answers (7)

Amir M. Mohamadi
Amir M. Mohamadi

Reputation: 1522

I just forgot to put [] to the function parameter with array data type like this:

🚨 Instead of this:

void addToDB(int arr) {
    // code
}

✅ Do this:

void addToDB(int arr[]) {
    // code
}

Upvotes: 0

Vishal Gupta
Vishal Gupta

Reputation: 71

Just for completeness, this error can happen also in a different situation: when you declare an array in an outer scope, but declare another variable with the same name in an inner scope, shadowing the array. Then, when you try to index the array, you are actually accessing the variable in the inner scope, which might not even be an array, or it might be an array with fewer dimensions.

Example:

int a[10];  // a global scope

void f(int a)   // a declared in local scope, overshadows a in global scope
{
  printf("%d", a[0]);  // you trying to access the array a, but actually addressing local argument a
}

Upvotes: 5

ABHISHEK YADAV
ABHISHEK YADAV

Reputation: 21

I think that you had intialized a 3d array but you are trying to access an array with 4 dimension.

Upvotes: 1

DShook
DShook

Reputation: 15664

You're trying to access a 3 dimensional array with 4 de-references

You only need 3 loops instead of 4, or int myArray[10][10][10][10];

Upvotes: 2

Cadoo
Cadoo

Reputation: 825

int myArray[10][10][10];

should be

int myArray[10][10][10][10];

Upvotes: 3

jmucchiello
jmucchiello

Reputation: 18984

What to change? Aside from the 3 or 4 dimensional array problem, you should get rid of the magic numbers (10 and 9).

const int DIM_SIZE = 10;
int myArray[DIM_SIZE][DIM_SIZE][DIM_SIZE];

for (int i = 0; i < DIM_SIZE; ++i){
    for (int t = 0; t < DIM_SIZE; ++t){            
        for (int x = 0; x < DIM_SIZE; ++x){

Upvotes: 7

coppro
coppro

Reputation: 14516

You are subscripting a three-dimensional array myArray[10][10][10] four times myArray[i][t][x][y]. You will probably need to add another dimension to your array. Also consider a container like Boost.MultiArray, though that's probably over your head at this point.

Upvotes: 19

Related Questions