1

次のような例外をスローしたい:

if (...) {  
    throw "not found";  
}

そして、このようにそれをキャッチします:

try {  
    myfunction();  
} catch (const char * msg) {  
    cout << msg << endl;  
}

しかしそれからそれは言う

terminate called after throwing an instance of 'char const*'

なぜそれはterminateを呼び出し、「notfound」をスローしないのですか?

編集:

私はそれをこれに変更しました:

try {
    throw "not found";
} catch (const char * msg) {
    cout << "test" << endl;
} catch(...) {
    cout << "test" << endl;
}

同じエラーが発生します。

EDIT2:上記の特定のメソッドを呼び出さない場合、それは機能します!しかし、私はこのメソッドが例外と何の関係があるのか​​理解していません。上記のmyfunction()以外の関数では使用しませんでした。もう少しテストさせてください。それから私はあなたに戻ります!

EDIT3:

ああ、これは恥ずかしいです。間違った関数を呼び出したようです。この恥ずべき経験であなたを悩ませてしまったことをとても残念に思います!

4

1 に答える 1

1

try / catchブロックの外でthrowを使用すると、terminateが呼び出されます。スローする関数がtryブロックにあることを確認してください。

#include <iostream>

void myFunc()
{
    throw "Throwing!";
}

int main()
{
    try
    {
        myFunc();
    }
    catch(...)
    {
        std::cout << "Works fine.";
    }

    myFunc(); // Terminate gets called.

    return 0;

}
于 2013-02-24T00:33:24.860 に答える