У меня есть 3 файла, которые относятся к этой проблеме. file.h, file.C и user.C.
file.h имеет закрытого пользователя, fstream logs.
В конструкторе файла .C он открывает логи. Это не делается в конструкторе, но конструктор вызывает функцию OpenLog ().
file.h также имеет встроенную функцию закрытия:
CloseLog () {if (logs) logs.close ();}
Файл user.C имеет функцию выхода, которая создает экземпляр файла, а затем вызывает CloseLog. Это вызывает ошибки в этой точке. Я создал несколько других фиктивных тестов, и кажется, что журналы где-то теряются в миксе ...
Переход от file.C к user.C и затем обратно к file.C вызывает это. Если в файле file.C есть журналы fstream как глобальные, то это работает, но я бы предпочел избегать глобальных.
Есть мысли о том, что мне здесь делать? Пожалуйста, дайте мне знать, если я должен выложить больше кода об этом, я могу настроить некоторые фиктивные вещи, чтобы лучше показать это.
** Вот больше кода, как и было запрошено - я не могу копировать и вставлять, поэтому простите за его отсутствие, пожалуйста, **
Я буду называть классы helpME.h, helpME.C и user.C
// helpME.h
#ifndef _helpME_H
#define _helpME_H
# include
#include
// различные включает в себя
класс helpME {
частное:
журналы fstream;
общественность:
void CloseLog () {if (logs) logs.close ();}
};
# ENDIF
// конец helpME.h
// helpME.C
void helpME :: helpME (int argc, char ** argv)
{
// различный код
OpenLog ();
}
void helpME :: OpenLog ()
{
// logname установлен выше, у меня был оператор печати, который показал, что это правильно
logs.open (логин, ios :: in | ios :: out | ios :: trunc);
}
// конец helpME.C
// user.C
void user :: quitHelpME (item)
{
helpME * hME = (helpME *) item;
hME-> CloseLog ();
}
// Конечный пользователь. C
Опять же - пожалуйста, простите за отсутствие ясности, я думаю, что я, возможно, просто запутал вещи, добавив это ... этот код находится в другом окне и не может быть скопирован.