私はこのコードを持っている:私の例外タイプを捕まえても、私のプログラムが例外からクラッシュするのはなぜですか?
printf("hello\n");
try
{
for (unsigned i = 0; i < par.size(); i++)
rep.delete_rev(par[i]);
}
catch(TriedToDeleteRoot e)
{
printf("catched 1 !\n");
}
catch(...) {
printf("catched sth else !\n");
}
printf("hahaha\n");
を、これは私が出力に持っているものです。
hello
terminate called after throwing an instance of 'TriedToDeleteRoot'
what(): Tried to delete root
なぜですか? TriedToDeleteRootはstd :: exceptionから継承しています。何が間違っているのか分かりません。ありがとう。
EDIT: これは私が例外をスローする方法である:
throw TriedToDeleteRoot();
コードは関数内に存在する必要があります。あなたは 'delete_rev'の実装と' rep'が持っているどんな型の定義も投稿できますか? –
私たちが見ることができないコードの他の場所から投げられる可能性がありますか?問題を実証する*最小*しかし完全な例を表示できますか? – Flexo
あなたはまだ前のものを扱っている間に2番目の例外を投げている可能性があります。これは* bad *となり、IIRCはcatchブロックによってどのような例外が処理されているかにかかわらず、 'std :: terminate'を呼び出すことになっています。 – Flexo