Привет всем, я пытаюсь создать класс, который в основном представляет собой трехмерную матрицу из них и нулей. К сожалению, когда я пытаюсь динамически выделять 3D-матрицу в конструкторе, консоль меня бросает: «размер массива в новом выражении должен быть постоянным», я не понимаю, почему это происходит, компилятор, похоже, считает, что это статический массив.размер массива в новом выражении должен быть постоянным (динамический массив)
вот код
#include <stdlib.h>
#include <iostream>
class map
{
public:
map(int, int, int,std::string);
~map();
private:
int dx,dy,dz;
std::string generatorName;
bool* matrix3D;
};
map::map(int x=0,int y=0,int z=0,std::string gen="EMPTY")
{
matrix3D=new bool[x][y][z];
generatorName=gen;
}
map::~map()
{
delete matrix3D;
}
C++ не позволяет выделять многомерные массивы переменных размеров. Вам нужно будет либо выделить один, длинный, одномерный массив и использовать свои собственные трюки для индексации для имитации 3D-массива, или вам нужно будет разбить распределение на несколько меньших шагов. – templatetypedef
Вы не можете выделить многомерные массивы, подобные этому, и вам не хватает '[]' в вашем вызове 'delete', и вы должны использовать 3D' vector' 'bool' вместо вашего' bool * '. – Holt
Во-первых, я бы не назвал свой класс 'map', так как в C++ уже есть класс' std :: map'. Во-вторых, контейнеры, такие как 'std :: vector', заботятся об этом для вас. В-третьих, ваш «класс карты» будет страдать от ошибок, как только вы попытаетесь скопировать/назначить с ним из-за отсутствия «правила 3». – PaulMcKenzie