Я должен реализовать небольшую и простую игру в C++ (лабиринте), и у меня есть некоторые проблемы прямо сейчас.C++ vector с указателями объектов
Некоторые фрагменты: У меня есть массив объектов указателей, который представляет свои поля в лабиринте
Field*** maze;
инициализации лабиринта:
for (n = 0; n < MAZE_WIDTH; n++) {
this->maze[n] = new Field*[MAZE_HEIGHT];
for (p = 0; p < MAZE_HEIGHT; p++) {
this->maze[n][p] = new Field();
this->maze[n][p]->x = n;
this->maze[n][p]->y = p;
}
}
При создании лабиринта мне нужен список уже посещенных полей и стопки , поэтому я сделал:
std::vector<Field*> visited;
std::vector<Field*> stack;
Позже я хочу поставить поле * в мой стек
stack.push_back(neighbour);
Но после этого толчка все значения в объекте неверны. Даже если я попробовать
neighbour = stack.back();
всех значения укомплектовать разные
Я уже каштановые темы по этой теме, и именно поэтому я выбрал вектор указателей, а не объекты.
Где моя вина?
Edit: еще несколько фрагментов в соответствии с просьбы:
Конечно, я выделить память для самого
this->maze = new Field**[MAZE_WIDTH];
поля мата является простым классом, который выглядит следующим образом:
class Field {
public:
Field();
~Field();
bool w_left;
bool w_right;
bool w_front;
bool w_back;
unsigned int x;
unsigned int y;
private:
};
Вы не случайно изменяете одно и то же полевое задание каждый раз при добавлении в стек? Это приведет к тому, что все значения будут одинаковыми и будут равны последнему добавленному значению. – Tudor
Не могли бы вы дать немного больше кода? Например, какой тип «сосед»? Как он инициализируется? (Похоже, что вы можете вставить указатель на локальную переменную в 'vector', но без кода, это невозможно сказать.) –
Это может быть фрагмент кода, но вы пропустили' new Field ** [ ] 'в начале? Кроме того, я думаю, что есть более простые способы обработки многомерных массивов, чем указатель на указатель на указатель. – slaphappy