我有 3 个与此问题相关的文件。file.h、file.C 和 user.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>
//各种包含类 helpME {
私人:
fstream 日志;公共:
无效 CloseLog() {if (logs) logs.close();}
};
#万一//结束帮助ME.h
//helpME.C
void helpME::helpME(int argc, char** argv)
{
//各种代码
OpenLog();
}void helpME::OpenLog()
{
//logname 在上面设置,我之前有一个打印语句显示这是正确的
logs.open(logname, ios::in | ios::out | ios::trunc);
}//结束帮助ME.C
//user.C
void user::quitHelpME(item)
{
helpME* hME = (helpME*) item;
hME->关闭日志();
}//最终用户.C
再次 - 请原谅缺乏清晰度,我想我可能只是通过添加这个来混淆更多的东西......这个代码在另一个盒子上,不能被复制。