недопустимые типы 'int [int]' для индекса массива

Этот код выдает ошибку компиляции, указанную в заголовке, может кто-нибудь сказать мне, что изменить?

#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");

}

заранее спасибо

12.12.2008 19:25:23
6 ОТВЕТОВ
РЕШЕНИЕ

Вы подписываете трехмерный массив myArray[10][10][10]четыре раза myArray[i][t][x][y]. Возможно, вам понадобится добавить другое измерение в ваш массив. Также рассмотрим контейнер, такой как Boost.MultiArray , хотя, возможно, это сейчас над вашей головой.

15
12.12.2008 19:28:15
черт возьми, я должен был случайно удалить эту строку ранее, прежде чем я начал пытаться запустить его.
user33061 12.12.2008 19:32:45

Вы пытаетесь получить доступ к трехмерному массиву с 4 разыменованиями

Вам нужно всего 3 петли вместо 4, или int myArray[10][10][10][10];

1
7.01.2012 01:00:10
int myArray[10][10][10];

должно быть

int myArray[10][10][10][10];
2
7.01.2012 00:59:50

Что поменять? Помимо проблемы 3 или 4-мерного массива, вам следует избавиться от магических чисел (10 и 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){
5
12.12.2008 20:00:41
На всякий случай в будущем у вас будет другое количество пальцев ;-)
Steve Jessop 13.12.2008 02:55:06

Я думаю, что вы инициализировали трехмерный массив, но вы пытаетесь получить доступ к массиву с 4 измерениями.

0
4.02.2018 17:25:41
Мой совет при даче ответов - попытаться указать на конкретные части исходного кода из вопроса. В вашем случае это будет означать включение int myArray[10][10][10];для трехмерной ссылки myArray[i][t][x][y] = i+t+x+y;на массив и для четырехмерной ссылки на массив. Иногда люди будут понижать голос, если у них нет контекста, чтобы понять ваш ответ.
Andrei Tudor Diaconu 4.02.2018 17:41:36

Просто для полноты, эта ошибка может произойти и в другой ситуации: когда вы объявляете массив во внешней области видимости, но объявляете другую переменную с тем же именем во внутренней области видимости, затеняя массив. Затем, когда вы пытаетесь индексировать массив, вы фактически получаете доступ к переменной во внутренней области видимости, которая может даже не быть массивом или массивом с меньшим количеством измерений.

Пример:

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
}
0
17.04.2020 01:13:51