이 문제와 관련된 파일이 3 개 있습니다. file.h, file.C 및 user.C.C++ 헤더 파일의 가변 범위 문제
file.h에는 private 멤버 인 fstream 로그가 있습니다.
file.C의 생성자에서 로그를 엽니 다. 생성자에서는이 작업을 수행하지 않지만 생성자는 OpenLog() 함수를 호출합니다.
file.h 또한 인라인 가까운 기능을 가지고 :
CloseLog() {if (logs) logs.close();}
파일 user.C 파일의 인스턴스를 생성 종료 기능을 가지고, 다음 CloseLog 호출합니다. 이 시점에서 오류가 발생합니다. 다른 더미 테스트를 만들었고 로그가 믹스 어딘가에서 사라지는 것처럼 보입니다 ...
file.C에서 user.C로 이동 한 다음 file.C로 돌아갑니다. fstream 로그를 file.C에서 전역으로 사용하는 경우 작동하지만 - 전역으로 피하는 것이 좋습니다.
내가 여기에서해야 할 것에 대한 의견이 있으십니까? 이것에 대해 더 많은 코드를 게시해야한다면 알려 주시기 바랍니다. 더 나은 데모를 위해 약간의 더미 물건을 설정할 수 있습니다.
** 여기에 더 코드는, 요청에 따라 - 내가
내가 클래스 helpME.h, helpME.C 및 user.C를 호출 복사 및 붙여 넣기, 그래서 ** 그것의 부족 제발 용서 할 수없는
//helpME.h
#ifndef _helpME_H
#define _helpME_H#include < iostream>
#include < fstream>
//various includesclass helpME {
private:
fstream logs;public:
void CloseLog() {if (logs) logs.close();}
};
#endif//end helpME.h
//helpME.C
void helpME::helpME(int argc, char** argv)
{
//various code
OpenLog();
}void helpME::OpenLog()
{
//logname is set above, i had a print statement before that showed this is correct
logs.open(logname, ios::in | ios::out | ios::trunc);
}//end helpME.C
//user.C
void user::quitHelpME(item)
{
helpME* hME = (helpME*) item;
hME->CloseLog();
}//end user.C
다시 - 명확성의 부족을 용서하십시오, 나는 ...이 코드가 다른 상자에 이상 복사 할 수 없습니다이를 추가하여 단지 혼란 가지 더있을 수 있습니다 생각하고 있어요.
예, 코드의 관련 부분을 게시해야합니다. 너의 설명이 나에게 분명하지 않다. –
하나의 참고 사항 : 파일에는 생성자/소멸자/멤버가 없으며 클래스가 수행합니다. –
베드로가 한 말을 강조하기 위해, 이것은 당신의 묘사가 불완전하지만 긍정적 인 잘못이 아니라는 점에서 형편없는 형식의 질문입니다. 또한 "파일에서 C로 이동"이라는 의미를 분명히 알지 못합니다. 몇 가지 코드, 가능한 한 완전한 최소 예를 게시하십시오. –