1. ホーム
  2. c++

[解決済み】文字列関数で'char const*'のインスタンスを投げた後に呼び出されるterminate [閉店].

2022-01-21 03:38:06

質問

引数がフォーマットに合わない場合、メッセージを投げたい。実は、何が起こるかわからないのです。std::stringを使ってメッセージを投げようとしたが、うまくいかない。どうなっているのでしょうか?

また、コンパイラは "abort called" というメッセージを表示しました。

開く前にトピックを検索しましたが、満足のいく回答は見つかりませんでした。

string timeConversion(string s) {
    // hh:mm:ss:AM
    if(s.length() != 11)
        throw "message";

    return something;
}

編集:コードを簡略化しました。

どのように解決するのですか?

文字列を投げないでください ( const char* ):

throw "failed because of hour";

例外を発生させる class :

class MyException : public std::exception
{
public:
    MyException(const char* err) : std::exception(err) {}       
};

throw ということを。

throw MyException("failed because of hour");

で、次に catch それを

try
{
    // code that might throw
}
catch(const MyException& ex)
{
    // process exception
}

例外が発生し、捕捉されない場合 (現在のケース) は terminate が呼び出されます。