首页 > 解决方案 > 结构不保存成员变量值

问题描述

我有一个 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 变量,因此当我尝试访问它时会出现断言错误:

显示参数的值不为零,并且最终的结构仍然为零

标签: c++

解决方案


推荐阅读