2016-04-29 5 views
1

У меня есть этот массивКак сделать многомерное в C++?

int sequence[2][3][2][2][50][2] = { 
{ 
    {1}, 
    {{ 
     {2, 4}, 
     {3, 5} 
    }, 
    {255,0,0} 
    } 
    }, 
    { 
    {2}, 
    {{ 
     {3, 4}, 
     {2, 6} 
    }, 
    {0,0,255} 
    } 
    } 
}; 

Всякий раз, когда я пытаюсь индексировать первый многомерный массив, используя

int frame[2] = {sequence[1]} 

Я получаю эту ошибку «недопустимое преобразование для«Int (*) [2] [2 ] [50] [2]»на 'Int' [-fpermissive]

Что я делаю неправильно?

+5

Большинство ваших ячеек не используются ... Зачем вам нужен такой массив? – Holt

+4

imho все, что имеет более двух измерений, является полным излишеством и слишком сложно обрабатывать. Либо сгладьте размеры, либо инкапсулируйте их в какую-то значимую структуру данных. – user463035818

+4

Вы используете язык, поддерживающий ООП, не нужно использовать что-то столь же грязное, как этот массив. Создавайте классы/структуры, которые будут содержать экземпляры других вместе со своими собственными параметрами. Там вы можете идти так глубоко, как вам нравится, и по-прежнему поддерживать чувство порядка. – TheFooBarWay

ответ

1

Всякий раз, когда я пытаюсь индекс первый многомерный массив, используя

int frame[2] = {sequence[1]} 

Давайте упростить синтаксис, который вы используете:

int frame[2] = {/*list of ints*/} 

Это инициализирует одномерный массив из 2 int, используя фигурную скобку огороженного список целых чисел.

Элемент вашего внешнего многомерного массива с арностью k, также является многомерным массивом (с arity k-1). Это не int.

Итак, нет ничего плохого в том, как вы индексируете многомерный массив. Что не так, пытается инициализировать массив, если int с многомерным массивом в качестве первого значения.

Как его инициализировать?

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

Вот синтаксически правильный способ инициализации frame:

int frame[2] = {sequence[0][0][0][0][0][0], sequence[0][0][0][0][0][1]}; 

Он использует значения в первом подмассива первого подмассива первого подмассива первого подмассива первого подмассива крайнего массива.

+0

Как его инициализировать? –

+0

@JonathanYu, который зависит от того, что вы хотите инициализировать. Неясно, какое из целых значений в 5-мерном массиве 'sequence [1]' вы пытаетесь использовать. Есть, конечно, гораздо больше значений, чем 2, и сколько будет соответствовать 'frame'. – user2079303

+0

@JonathanYu В любом случае, я добавил пример, который, по крайней мере, синтаксически правильный. – user2079303

Смежные вопросы