2013-04-16 2 views
0

나는 Shapes 클래스와 gShapes 벡터를 가지고있다. 오브젝트를 벡터 파일로 작성하고 있습니다.벡터에서 파일로 데이터를 씁니다. C++

char* str; 
vector<Shape*>::iterator it; 
for(it = gShapes.begin(); it != gShapes.end(); it++) 
{  
    str = reinterpret_cast<char*>(reinterpret_cast<void*>(*it)); 
    saveFile.write(str, sz); 
} 

내 클래스에 동적 메모리를 추가하기 전까지는 완벽하게 작동 했으므로 이제이 코드는 데이터가 아닌 파일에 포인터를 씁니다.

+1

개체를 완전히 serialize해야합니다. 예를 들면 다음과 같습니다. http://www.boost.org/doc/libs/1_53_0/libs/serialization/doc/index.html – Chad

답변

4

항상 극히 드문 경우를 제외하고는 파일에 데이터를 저장할 때 데이터를 "직렬화"해야합니다. 즉, 포인터, 참조 또는 기타 간접 형식이 아닌 "플랫"형식

Shape에 포인터가있는 경우 개체에 operator <<을 사용하여 콘텐츠를 인쇄하는 것처럼 해당 포인터를 "풀어야"합니다.

+0

아, 드문 경우지만 포인터, 전체 구조 등을 작성할 수 있습니다 (예 : 쓰기와 같은 응용 프로그램에서 쓴 무엇을 읽고) – David

+1

더 나은가요? 이상한 실수를 제외하고는 필자가 살아있는 동안 그리고 취미로 코드를 작성한 30 년 동안 파일에 대한 포인터를 작성했다고 생각하지 않습니다. –

+0

포인터를 파일 오프셋으로 변환 할 수 있습니다. –

관련 문제