我在cpp寫了一個小的後端,我必須將一些填字數據寫入二進制文件。我創建了一個XWPuzzle類,其所有數據成員都是public的,而xWord是這個類的一個對象。這是與我想寫的二進制文件的代碼段:如何使用cpp將類的成員寫入二進制文件?
#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;
}
簽名,版本和類型的空值終止字符串,但是當它到達行編譯的程序會引發錯誤
file.write((char*)xWord.checksum,sizeof(xWord.checksum));
調試器在MSVCR100.dll引發第一次機會異常(訪問衝突讀取位置錯誤)。我是否以錯誤的方式使用類的成員做錯了什麼?這是一個獨立的項目,而不是任何作業。現在我已經跑了兩天了。任何具體的幫助讚賞。謝謝。
我還有其他數據要寫入,除了這個類的。
編輯:
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
我們至少需要看到'XWPuzzle'聲明。 – 2013-04-08 06:35:14
xWord對象在哪裏製作?我想看看你的班級聲明。 – 2013-04-08 06:37:46
抱歉,延遲。我已經添加了XWPuzzle的聲明。 – artfuldev 2013-04-08 06:54:31