我有3個文件涉及到這個問題。 file.h,file.C和user.C.C++頭文件變量範圍問題
file.h有私有成員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
再次 - 請原諒缺乏明確的,我想我可能只是迷惑的東西加入這個更多...這個代碼是在另一臺電腦,並且不能被複制。
是的,你應該發佈(你的代碼的相關部分)。你的描述對我來說並不完全清楚。 – 2010-07-14 20:50:53
一個注意事項:文件沒有構造函數/析構函數/成員,類就是這樣。 – 2010-07-14 20:52:08
爲了強調彼得所說的話,這是一個形式很糟的問題,因爲你的描述不僅是不完整的,而且是正確的錯誤。也不清楚「從file.C到user.C」的意思。發佈一些代碼,最好是一個完整的最小示例。 – 2010-07-14 21:25:41