2011-12-07 7 views
5

はここに私のコードません:日食cで警告「コントロールが非void型関数の終わりに到達した」++が、全く、コンパイルや実行時エラー

Composer& Database::GetComposer (string in_last_name) 
{ 
    for (int i = 0; i < next_slot_; i++) 
    { 
     if (composers_[i].last_name() == in_last_name) 
      return composers_[i]; 
    } 
} 

アイデアは作曲オブジェクトとリターンの配列を反復処理することですlast_nameフィールドが "in_last_name"と一致するオブジェクトへの参照私は警告が私に言っていることを理解しています。つまり、関数が何も返さない可能性があります(たとえば、ユーザーが無効な姓を指定した場合)。私の質問は、どうすればこの問題を回避できますか? forループの後に "return 0"と "return NULL"を追加しようとしましたが、コンパイルされませんでした。このメソッドは何も見つからない場合に例外をスローする必要がありますか?

+1

あなたは例外をスローする必要があります。 –

+1

警告は実際にはコード内の論理エラーです。すべての警告を修正しました。(とと同じ高への警戒レベルを上げ(合理的に)可能) –

+0

私はまだでもtry/catchブロックは、標準の例外を投げると同じ警告が表示されます。 – wbr

答えて

6

Composer&、つまりComposerへの参照を返すように関数が宣言されています。関数が適切な参照を返さず、呼び出し元が何かの戻り値を使用しようとすると、未定義の動作が発生します。

関数が合法的にそれが探しているものを見つけるために失敗する可能性があります場合は、代わりに参照ポインタに戻り値の型を変更することもできます。それはあなたNULLを返すためのオプションを与える:あなたの関数は、ターゲットを見つけるのに失敗した時に

Composer* Database::GetComposer (string in_last_name) 
{ 
    for (int i = 0; i < next_slot_; i++) 
    { 
     if (composers_[i].last_name() == in_last_name) 
      return &composers_[i]; 
    } 
    return NULL; 
} 

代わりに、例外をスローする可能性。

+0

は、私は、次のエラーメッセージが表示されますか? – wbr

+0

「型 'int型の右辺値から型 『作曲&』の非const参照の無効な初期化」:私はそれを行うとき –

+0

return NULL文と同じ行にあります。 – wbr

関連する問題