簡體   English   中英

如何使用cpp將類的成員寫入二進制文件?

[英]How to write members of a class to a binary file using cpp?

我正在cpp中編寫一個小型后端,在其中必須將一些填字游戲數據寫入二進制文件。 我創建了一個XWPuzzle類,其中所有數據成員都是公共的,並且xWord是此類的對象。 這是我要寫入二進制文件的代碼:

#include"binIncludes.h"

int main(int argc, char** argv)
{
    cout<<"Bin read-write Tester\n";
    xWord.title="Yeah!\0";
    xWord.author="Nobody\0";
    xWord.grid=147;
    xWord.userGrid=109;
    xWord.clues[0]="as\0";
    xWord.clues[1]="de\0";
    xWord.clues[2]="re\0";
    xWord.solution[0]="ASSET\0";
    xWord.solution[1]="DEER\0";
    xWord.solution[2]="REED\0";
    xWord.checksum=(int)(xWord.title.at(0))+(int)(xWord.author.at(0))+xWord.grid+xWord.userGrid;
    xWord.checksum+=(int)(xWord.clues[0].at(0))+(int)(xWord.clues[1].at(0))+(int)(xWord.clues[2].at(0));
    xWord.checksum+=(int)(xWord.solution[0].at(0))+(int)(xWord.solution[1].at(0))+(int)(xWord.solution[2].at(0));
    fstream file;
    file.open("binTest.bin",ios::out|ios::binary);
    file.write(SIGNATURE,sizeof(SIGNATURE));
    file.write(VERSION,sizeof(VERSION));
    file.write(TYPE,sizeof(TYPE));
    file.write((char*)xWord.checksum,sizeof(xWord.checksum));
    file.write(xWord.title.c_str(),xWord.title.size());
    file.write(xWord.author.c_str(),xWord.author.size());
    file.write((char*)xWord.grid,sizeof(xWord.grid));
    file.write((char*)xWord.userGrid,sizeof(xWord.userGrid));
    file.close();
    cout<<"File written\n";
    _getch();
    return 0;
}

SIGNATURE,VERSION和TYPE是以空字符結尾的字符串,但是編譯后的程序到達該行時會引發錯誤

file.write((char*)xWord.checksum,sizeof(xWord.checksum));

調試器在MSVCR100.dll上引發First-chance異常(訪問沖突讀取位置錯誤)。 我通過錯誤的方式使用班級成員來做錯什么嗎? 這是一個獨立的項目,而不是任何作業。 我已經為此花了兩天時間。 任何具體的幫助表示贊賞。 謝謝。

除了來自此類的數據,我還有其他數據要寫。

編輯:

XWPuzzle.h:

#ifndef XWPULZZLE_H
#define XWPUZZLE_H

#include"binIncludes.h"

class XWPuzzle
{
    public:
        string title;
        string author;
        int grid;
        int userGrid;
        string clues[3];
        string solution[3];
        int checksum;
} xWord;

#endif

binDefines.h:

#ifndef BIN_DEFINES_H
#define BIN_DEFINES_H

#include"binIncludes.h"

#define SIGNATURE "BinFile\0"
#define VERSION "0.1.1\0"
#define TYPE "With Solution\0"

#endif

binIncludes.h:

#ifndef BIN_INCLUDES_H
#define BIN_INCLUDES_H

#include<iostream>
#include<conio.h>
#include<string>
#include<fstream>

using namespace std;

#include"binDefines.h"
#include"XWPuzzle.h"

#endif

您正在將整數轉換為指針,並嘗試通過該指針寫入數據。 錯了 您應該獲取指向校驗和的指針,對其進行強制轉換,然后編寫

file.write((char *)(&xWord.checksum),sizeof(xWord.checksum));

與grid和userGrid字段相同

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM