c++ - 结构不保存成员变量值
问题描述
我有一个 Vector2D 结构,用于保存 Tile 对象和 Chunk 对象的 2D 数组:
template<typename T>
struct Vector2D
{
Vector2D() = delete;
Vector2D(U32 sizeX, U32 sizeY) : _size1{ sizeX }, _size2{ sizeY }
{
_array = new T * [_size1];
for (U32 i = 0; i < _size1; i++)
{
_array[i] = new T[_size2];
}
}
~Vector2D()
{
for (U32 i = 0; i < _size1; i++)
{
delete[] _array[i];
}
delete[] _array;
}
T& operator[](const Vector2& v) { assert(v.x < _size1&& v.y < _size2 && "vector out of bounds"); return _array[(U32)v.x][(U32)v.y]; }
const T& operator[](const Vector2& v) const { assert(v.x < _size1&& v.y < _size2 && "vector out of bounds"); return _array[(U32)v.x][(U32)v.y]; }
T*& operator[](const U32& i) { assert(i < _size1 && "index out of bounds"); return _array[i]; }
const T*& operator[](const U32& i) const { assert(i < _size1 && "index out of bounds"); return _array[i]; }
U32& sizeX() { return _size1; }
U32& sizeY() { return _size2; }
U64& size() { return (U64)_size1 * _size2; }
private:
T** _array;
U32 _size1;
U32 _size2;
};
因为它必须是默认构造函数,所以我必须在这里构造一个成员初始化列表:
World::World(I32 seed, WorldSize size) : _seed{ seed }, _size{size},
CHUNKS_X{ (U16)(_size / CHUNK_SIZE) }, CHUNKS_Y{ (U16)(CHUNKS_X / WORLD_RATIO) },
_tiles(_size, _size / WORLD_RATIO), _chunks(CHUNKS_X, CHUNKS_Y)
{
Chunk::world = this;
Player::world = this;
WorldGen::GenerateWorld(_seed, _size, _tiles);
player = new Player(Vector2(_size / 2.f + 0.5f, _size / WORLD_RATIO / 2.f + 0.5f));
for (U16 x = 0; x < CHUNKS_X; x++)
{
for (U16 y = 0; y < CHUNKS_Y; y++)
{
_chunks[x][y] = new Chunk(Vector2(x, y));
}
}
InitWorldView();
}
这一切都适用于 Tiles 的 2D 数组,但是当我构造 Chunks 2D 数组时,它不会保存 _size1 & 2 变量,因此当我尝试访问它时会出现断言错误:
解决方案
推荐阅读
- javascript - 防止在 ReactJS 中激活多个按钮颜色
- json - 序列化 DRF 中的嵌套对象
- awk - 使用 awk 比较两个文件中的两列时创建一个新文件
- java - 避免 SqlRecoverableException:语句已关闭
- python - 如何在不使用 OpenCV 关闭孔的情况下扩大二值图像
- google-apps-script - Google Apps Script .gs 文件中的 Logger.log(...) 没有输出 - 怎么了?
- javascript - 运行此路线时出现状态代码错误
- python - 将 matplotlib 条形图误差条移动到中心
- java - 将css样式表放在javafx项目的src目录下,但是找不到
- php - SQL LOAD DATA 本地文件