我需要帮助...我正在开发一个简单的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函数没有正确写入,任何人都有办法解决它?
答案 0 :(得分:2)
此代码在C ++中无效。使用灵活数组是C的一个特性,可以由C ++中的一些编译器实现。但它不是标准的C ++功能。所以从C ++的角度来看这个定义
class MapInfo
{
public:
D3DXVECTOR2 Size;
int Count;
Tile Tiles[];
};
无效。您必须使用const表达式指定数组的大小。
或者使用std :: vector而不是数组