2010-07-14 128 views
0

我有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 includes

class 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

再次 - 請原諒缺乏明確的,我想我可能只是迷惑的東西加入這個更多...這個代碼是在另一臺電腦,並且不能被複制。

+3

是的,你應該發佈(你的代碼的相關部分)。你的描述對我來說並不完全清楚。 – 2010-07-14 20:50:53

+2

一個注意事項:文件沒有構造函數/析構函數/成員,類就是這樣。 – 2010-07-14 20:52:08

+0

爲了強調彼得所說的話,這是一個形式很糟的問題,因爲你的描述不僅是不完整的,而且是正確的錯誤。也不清楚「從file.C到user.C」的意思。發佈一些代碼,最好是一個完整的最小示例。 – 2010-07-14 21:25:41

回答

0
void user::quitHelpME(item) 
{ 
helpME* hME = (helpME*) item; 

這不會創建一個實例,它是用C風格的鑄造無論從任何產品的指針helpME投。

如果item爲NULL,那麼調用它的一個方法會導致seq錯誤。

否則在你的例子中還沒有足夠的細節給你一個答案,代碼目前聽起來很合理。

+0

XtPointer項目 ...正在調查那現在......謝謝你! (有些人可能會解釋爲不清晰 - 這是傳統代碼,推動是'編譯'...沒有太多的動力來清理它或理解它,所以我正在學習,因爲我去了。缺少知識。) – glazedandconfused 2010-07-14 21:52:41

0

因爲您已經在.h文件中聲明瞭變量,所以您有兩個副本。編譯器不會'看到'.h文件,它只是將文件中的內容複製/粘貼到.C文件中,所以,這就是爲什麼您有兩個變量副本。

變量聲明爲在.h文件extern,並沒有extern只有一個.C文件再次聲明,並在該文件中的任何聲明不使用static。應該解決您的問題。

+0

非常感謝 - 當我這樣做時,我收到消息'錯誤:爲日誌指定的存儲類'。我看了看,看起來我可能在我的.h某處有問題,所以我正在尋找。 再次,謝謝。 – glazedandconfused 2010-07-14 21:44:08

+0

http://cboard.cprogramming。com/c-programming/113962-my-error-storage-class-specified-parameter.html 是我正在查看的鏈接,以供將來參考其他人 – glazedandconfused 2010-07-14 21:44:38