この問題に関連する 3 つのファイルがあります。file.h、file.C、および user.C。
file.h には、プライベート メンバ fstream ログがあります。
file.C のコンストラクターで、ログを開きます。コンストラクターではこれを行いませんが、コンストラクターは関数 OpenLog() を呼び出します。
file.h にはインライン クローズ関数もあります。
CloseLog() {if (ログ) 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 < iostream>
#include < fstream>
//さまざまなインクルードクラス helpME {
プライベート:
fstream ログ;public:
void CloseLog() {if (ログ) logs.close();}
};
#endif//helpME.h の終了
//helpME.C
void helpME::helpME(int argc, char** argv)
{
//各種コード
OpenLog();
}void helpME::OpenLog()
{
//logname は上に設定されています。前に、これが正しいことを示す print ステートメントがありました
。 logs.open(logname, ios::in | ios::out | ios::trunc);
}//helpME.C の終了
//user.C
void user::quitHelpME(item)
{
helpME* hME = (helpME*) item;
hME->CloseLog();
}//エンドユーザー.C
繰り返しますが、明確でないことをお許しください。これを追加することで、さらに混乱を招く可能性があると思います...このコードは別のボックスにあり、コピーすることはできません.