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