2013-04-25 4 views
-1

У меня есть двумерный массив указателей на объектах блокКак создать указатель на массив объектов указателей

Block* grid[GRID_COLUMNS][GRID_ROWS]; 
for (int i=0; i>GRID_COLUMNS; i++) 
{ 
    for (int k=0; k>GRID_ROWS; k++) 
    { 
     grid[i][k] = NULL; 
    } 
} 

Как создать указатель на сетку?

??? // create pointer to grid here 

myBlock.ShiftDown(???); // pass pointer to grid to the function 

Определение функции myBlock.ShiftDown. Что я должен поставить вместо ??? сделать эту работу?

void Block::ShiftDown(???) 
{ 
    if (row == GRID_ROWS) 
     ???grid[column][row] = this; 
    else 
     row++; 
} 

Редактировать: то, что я пытаюсь сделать здесь, позволяет Блоку :: ShiftDown манипулировать сеткой. Если есть более простой способ сделать это, я хотел бы услышать об этом.

+0

Функция 'ShiftDown' записывается за пределы массива. – interjay

ответ

0

В чем проблема с:

void Block::ShiftDown(Block* g[GRID_COLUMNS][GRID_ROWS]) 
{ 
    if (row == GRID_ROWS) 
     g[column][row] = this; 
    else 
     row++; 
} 

и называют его:

myBlock.ShiftDown(grid); 
+0

не то, что вы не передаете массив здесь. 'g' - это указатель, не более того. 'grid' _decays) в указатель. – Elazar

+0

Спасибо, как новичок, я не понимал, что это было легко. –

0

Предполагая, что вы используете C/C++ имя самого массива является указателем на первый элемент из массив. Так что в вашем случае сетки сам по себе является указатель на первый столбец первой строки вашего массива

0

Как насчет создания описания типа псевдоним:

using my_array_type = 
    std::array<std::array<std::shared_ptr<Block>, GRID_ROWS>, GRID_COLUMNS>; 

Теперь вы можете использовать my_array объявить типы:

my_array_type grid; 

И, конечно, использовать этот тип, чтобы объявить функцию аргумента:

void Block::ShiftDown(my_array_type& grid); 

И если у вас нет компилятора C++ 11, и поэтому не имеют std::array и не могут использовать using создать псевдонимы типа, то есть старый typedef:

typedef Block *my_array_type[GRID_COLUMNS][GRID_ROWS]; 
Смежные вопросы