바이너리 파일에서 SRD 객체의 배열을 읽었습니다. 처음으로 그렇게 했으므로 헤더를 수정하여 모든 구성원을 공용으로 만들었습니다. 계속해라. 과제를 완료했습니다. 남은 과제는이 멤버를 비공개로 만들고 수정하는 방법입니다. 그러나 문제가 있습니다. 디버깅 목적으로 나는 오직 1 명의 멤버 만 private으로 두었고, 모든 메소드를 작성할 때까지 그렇게 유지할 것입니다. 이 멤버는 부호없는 int C입니다. 반환하는 메서드를 작성할 때 (getC()는 C를 반환합니다) 값이 0000 ... 3435973836 인 값을 반환합니다. 즉 설정되지 않았습니까? 그래서 바이너리 파일의 객체 수에 따라 SRD에 대한 포인터 배열을 만들었습니다.바이너리 데이터에서 객체 읽기
SRD *a;
...
a = new SRD[numOfRecords];
및 배열은 파일에서 가득 ... 지금
for (i=0; i<numOfRecords; i++)
{
f.seekg(i * sizeof s);
f.read((char *)&a[i], sizeof s);
cout << a[i].getCC();
}
, a[i].getCC()
작품 C 공공이지만, 개인 차종이 000..3435 ... 의미가 접근하기 문제는 아니지만 이전 for 루프에서 fread로 설정되지 않았습니다. 이 값을 설정하는 할당 연산자의 일부 유형이 필요하다고 상상하지만, 단서가 없습니다.
간단한 예제를 작성하려면 어떻게해야하나요? –
예제가 추가되어 도움이되기를 바랍니다. – Reunanen
실제로 문제는 다른 것이 었습니다. 헤더가 특정 순서로 정의되었고, 첫 번째 멤버는 배열이었고 C는 두 번째 였고 디버깅 중에는 C로 시작하여 두 번째 위치에서 공개적인 것보다 위에있는 것은 클래스의 구조를 변경했다. so, 클래스 P { int i; char c; } 은 과 다릅니다. 클래스 P { char c; int i; } 이진 파일의 데이터가 특정 순서를 가지며 클래스 정의의 순서를 재 배열 할 때 멤버 (c)가 다른 멤버 (i)에 대한 데이터에 액세스하려고 시도하므로, –