计算写入的类大小

时间:2014-01-10 00:08:58

标签: c++ arrays class winapi

我需要帮助...我正在开发一个简单的2D游戏,我将游戏地图保存在一个带有结构的文件中,如下所示:

void MapSystem::SetMapInfo(char* Filename, MapInfo* mapInfo)
{
    HANDLE hFile = CreateFile(Filename, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    if (hFile == INVALID_HANDLE_VALUE)
        return;
    DWORD dwSize = GetFileSize(hFile, NULL);
    SetFilePointer(hFile, NULL, NULL, FILE_BEGIN);
    DWORD Written;
    WriteFile(hFile, (void*)&mapInfo, sizeof(MapInfo), &Written, NULL);
    CloseHandle(hFile);
}

这是我的班级MapInfo:

struct Tile
{
    D3DXVECTOR2 Pos;
    int Id;
};

class MapInfo
{
public:
    D3DXVECTOR2 Size;
    int Count;
    Tile Tiles[];
};

我的问题是: 当我使用sizeof(MapInfo)它返回12时,我相信编译器将Tiles []视为指针,因此它不会保存Tiles数组,即使我计算新的大小,如下所示: / p>

DWORD newSize = sizeof(MapInfo)+(mapInfo.Count*sizeof(Tile))

WriteFile函数没有正确写入,任何人都有办法解决它?

1 个答案:

答案 0 :(得分:2)

此代码在C ++中无效。使用灵活数组是C的一个特性,可以由C ++中的一些编译器实现。但它不是标准的C ++功能。所以从C ++的角度来看这个定义

class MapInfo
{
public:
    D3DXVECTOR2 Size;
    int Count;
    Tile Tiles[];
};

无效。您必须使用const表达式指定数组的大小。

或者使用std :: vector而不是数组