質問

   int somefunction(bool a)
    {
      try
      {
        if(a)
        throw Error("msg");
        return 2;
      }
     catch (Error const & error)
     {
       //do i need to return anything here??
       //return -1;
     }
    }
役に立ちましたか?

解決

何かを返すか、例外を再スローする(または新しい例外をスローする)必要があります。キーワードを使用するだけで同じ例外を再スローできます

throw

catchブロック内で、例外や引数なしで後で。

他のヒント

そこに何も返さない場合、戻り値は定義されておらず、おそらく有効な戻りコードの1つを取得するため、呼び出し先はおそらく間違った動作をするでしょう。これを試してください:

printf("%i\n", somefunction(false));
printf("%i\n", somefunction(true));

出力:

2
2293512

コンパイラーはこれについても警告を出します(例えば、「制御が非void関数の終わりに到達しました」)。

この関数はintを返すため、intを返す必要があります。別の方法は、関数で例外をキャッチして伝播させないことです。

最初に、6行目でスローする例外を9行目でキャッチすることにより、例外を誤用しています。基本的には、通常のプログラムフローでできることを「if」で実行しています。ステートメント。このようにスローされた例外をコードベースに追加することにより、例外が本当に例外的な状況に使用されることはなくなります。簡単な代替手段がある場合は、関数から例外をスローしないことをお勧めします。

とはいえ、 int 関数を終了するには2つの方法があります:

  • int
  • を返す
  • 例外をスローする

例外を再スローしない限り、int(おそらくエラーのセンチネル値)を返す必要があります。

コンパイラ/コンパイラの設定によっては、戻り値なしで残すことができるintを返す関数をコンパイルすることはできません。そのため、例外を再スローする場合を除き、値を返す必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top