У меня есть список объектов 'cell' в двумерном массиве длины [sizeX] [sizeY].Эти Cell
объекты содержат массив типа *Cell
, который должен указывать на каждую из соседних ячеек данной ячейки в формате Север, Восток, Юг, Запад (Никогда не ешьте скучные вафли).
Этот массивназывается compass
и определяется с длиной 4. После инициализации ячеек (когда все значения compass
установлены на nullptr
), у меня есть цикл, который пытается заполнить Cell.compass
с указателями на соответствующие соседние ячейки.
Однако я обнаружил, что, несмотря на все это, в каждой ячейке я обнаружил, что compass
все еще полон нулевых значений.
В этом циклеЯ также запускаю функцию Cell::computeTopology()
, которая заполняет вектор (который является свойством Cell
) действительных ненулевых индексов compass
.Это также пусто.
Я установил точку останова как до, так и после того, как эта функция была вызвана с одинаковым эффектом.В любом случае, я включу и эту функцию.Я совершенно сбит с толку, и некоторая помощь здесь будет принята с благодарностью.
Проблемная область:
const int sizeX = SCREEN_WIDTH / SCALE;
const int sizeY = SCREEN_HEIGHT / SCALE;
Cell cells[sizeX][sizeY];
for (int x = 0; x < sizeX; x++){
for (int y = 0; y < sizeY; y++){
cells[x][y].setPos(x, y);
cells[x][y] = Cell();
//cells[x][y].setColor(rand() % 255, rand() % 255, rand() % 255);
}
}
for (int x = 0; x < sizeX; x++) {
for (int y = 0; y < sizeY; y++) {
Cell c = cells[x][y];
if (x - 1 >= 0) {
c.compass[3] = &cells[x - 1][y];
}
if (x + 1 < (SCREEN_WIDTH / SCALE)) {
c.compass[1] = &cells[x + 1][y];
}
if (y - 1 >= 0) {
c.compass[0] = &cells[x][y - 1];
}
if (y + 1 < (SCREEN_HEIGHT / SCALE)) {
c.compass[2] = &cells[x][y + 1];
}
c.computeTopology();
}
}
И функция computeTopology()
void Cell::computeTopology()
{
int i = 0;
for (Cell *c : compass) {
if (c != nullptr) {
notNull.push_back(i);
i++;
}
}
}