저는 크로스 워드 데이터를 바이너리 파일에 써야하는 cpp에 작은 백엔드를 작성하고 있습니다. 모든 데이터 멤버가 public 인 XWPuzzle 클래스를 만들었고 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;
}
서명, 버전 및 TYPE은 널 종료 문자열은하지만 선에 도달 할 때 컴파일 된 프로그램에서 오류가 발생합니다
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' 선언을 참조해야합니다. –
xWord 객체는 어디에서 제작 되었습니까? 너의 계급 선언을보고 싶다. –
지연되어서 죄송합니다. 나는 XWPuzzle의 선언을 추가했다. – artfuldev