私は例外を使い始めており、いくつかのイベントやエラーをより正確に処理するために、から派生した独自のタイプの例外を作成しましたstd::exception
。これまでのところすべてうまくいきましたが、メソッドwhat()
が何も出力しない場合があることに気付きました。例外は適切にスローされてキャッチされますが、メソッドによって正常に出力される説明メッセージがwhat()
常に画面に表示されるわけではありません。メッセージの出力を終了した前の実行と同じパラメーターで発生する可能性があり、完全にランダムに見えます。
ここに私の例外があります:
class MyException : public std::exception
{
public:
MyException() throw() {}
~MyException() throw() {}
virtual const char *what() const throw()
{
return "general exception\n";
}
};
class FileError : public MyException
{
public:
FileError(std::string nFileName) : MyException(), fileName(nFileName) { }
~FileError() throw (){ }
virtual const char *what()
{
std::ostringstream oss;
oss << "Error with file : \"" << fileName << "\"." << std::endl;
return (oss.str()).c_str();
}
protected:
std::string fileName;
};
そして私に問題を引き起こすコンテキスト:
try
{
QFile sourceFile(sourceFileName);
if(!sourceFile.open(QIODevice::ReadOnly))
throw FileError(sourceFileName.toStdString());
sourceFile.close();
}
catch(FileError &e)
{
std::cout << "error file catch " << std::endl;
std::cout << e.what();
terminate();
}
「エラーファイルキャッチ」は常に出力されますが、「ファイルでエラーが発生しました...」と表示されることがあります。私が間違っていることは何ですか?ありがとう