мне нужна помощь с чем-то ... Я занимаюсь разработкой простой 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, я считаю, что компилятор обрабатывает плитки [] как указатель, и из-за того, что он Безразлично 't сохранить массив Tiles, и даже если я вычислил новый размер, вот так:
DWORD newSize = sizeof(MapInfo)+(mapInfo.Count*sizeof(Tile))
Функция WriteFile не записывает ее должным образом, у кого есть способ ее исправить?
Как распределяется «Плитка»? Если это указатель (например, назначенный с помощью 'new' или' malloc'), вам придется записать данные, которые он указывает отдельно. –
Я просто использую mapInfo.Tiles [0] .Id = 1, ничего не выделять – user3124543
Как вы думаете, данные идут? C++ старые массивы не выделяют себя. –