Когда я объявляю «Level» объект в «LevelEditor» определение класса, как это так, то все работает отлично:Декларирование объект на стеке в определении класса против в конструкторе
class LevelEditor
{
public:
LevelEditor(int w, int h, Shader* shader)
{
width = w;
height = h;
for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
tile[x][y] = new WorldSprite(tileWidth * x, tileHeight * y, tileWidth, tileHeight, shader);
}
}
}
//...
private:
//...
Level level = Level(50, 50);
WorldSprite* tile[300][300];
//tile characteristics
int tileWidth = 50;
int tileHeight = 50;
//flags
bool editing = true;
};
Но когда я объявляю «Level "объект в„LevelEditor“конструктор, как это так, я получаю переполнение стека:
class LevelEditor
{
public:
LevelEditor(int w, int h, Shader* shader)
{
width = w;
height = h;
for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
tile[x][y] = new WorldSprite(tileWidth * x, tileHeight * y, tileWidth, tileHeight, shader);
}
}
//NOTE: width and height both equal 50
level = Level(width, height);
}
//...
private:
//...
Level level;
WorldSprite* tile[300][300];
//tile characteristics
int tileWidth = 50;
int tileHeight = 50;
//flags
bool editing = true;
};
Это заставляет меня задаться вопросом, в чем разница между объявлением переменной в определении класса и в конструкторе кроме того, из время определения переменной. Любая идея о том, что может быть причиной? и как я могу объявить объект «Уровень» в конструкторе, не помещая ничего в кучу?
EDIT: «Уровень» Определение класса в случае, если это полезно:
class Level
{
public:
Level(int w, int h)
{
Worldwidth = w;
Worldheight = h;
for (unsigned int y = 0; y < Worldheight; y++)
{
for (unsigned int x = 0; x < Worldwidth; x++)
{
grid[x][y] = -1;
}
}
}
Level(){}
~Level()
{
for (auto it = tiles.begin(); it != tiles.end(); ++it)
{
delete *it;
}
tiles.clear();
for (auto it = entities.begin(); it != entities.end(); ++it)
{
delete *it;
}
entities.clear();
}
void draw()
{
}
private:
int Worldwidth;
int Worldheight;
int grid[300][300];
std::vector<Tile*> tiles;
std::vector<Entity*> entities;
};
Имеет ли класс Level правильный конструктор копирования? Покажите нам свое определение класса уровня. –
http://ideone.com/inKGMR Это, по крайней мере, количество байтов, которое занимает один из объектов 'LevelEditor'. Пересмотрите свой дизайн. Вы объявляете отдельные объекты размером более 300 Кбайт. – PaulMcKenzie
@RonTang не является конструктором копирования, то C++ автоматически дает классы, не требуя определения вручную? –