Я новичок в кодировании на C++, и мы должны создать игру tictactoe для школы, и с этим у меня есть следующая проблема. У меня есть поле родительского класса (которое является игровым полем и состоит из массива данных 2d) и дочернего класса ConsoleField (который реализует метод печати для вывода на консоль). Мы делаем это, чтобы позже добавить еще один класс для GuiField и использовать ту же логику игры, но другой метод печати.C++ initialize 2d array в родительском классе приводит к плохому указателю в классе child
В любом случае, моя проблема заключается в том, что я хочу передать размер игрового поля из конструктора дочернего класса в конструктор родительского класса и инициализировать массив данных 2d. Я попытался сделать это следующим образом, используя список инициализации конструкторов.
class ConsoleField : public Field {
public:
ConsoleField(int size) : Field(size)
{
}
void print() = 0;
};
class Field {
protected:
int size;
int** data;
public:
Field(int size):size(size)
{
int** data = new int*[size];
for (int i = 0; i < size; i++)
{
data[i] = new int[size];
}
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
data[i][j] = 0;
}
}
}
void print() {};
};
При отладке я считаю, что конструктор родительского класса делает все, что я хочу, чтобы это сделать, и устанавливает его член переменного размера = размер, который он получает из детского конструктора, а также создает указатель на массив данных 2D и инициализирует массив данных со всеми 0. Но при переходе к дочернему конструктору данные переменной-члена в дочернем классе не установлены, и его указатель возвращает 0000000.
Как использовать родительский конструктор для инициализации массива 2d для дочернего класса и получить действительный указатель на массив данных?
Спасибо за помощь.
Ах, я понимаю. Спасибо! Я просмотрел код довольно-таки и не знаю, как это проскользнуло мимо меня. Я должен был это знать уже. Спасибо огромное! –