1. ホーム
  2. C++

34:5: エラー: 制御が非ボイド関数の終わりに達する可能性がある [-Werror,-Wreturn-type] エラー解析

2022-02-11 15:48:09
<パス

Nucleus.comでプロジェクトに取り組むと、よくこの問題に遭遇します。VS上では問題なく動くのですが、Nucleus.comに載せると、このような問題が発生します。/solution.h:34:5: error: control may reach end of non-void function [-Werror,-Wreturn-type] とエラーが見つからないことが多く、今日、忘れないように記録するためにエラーに出会いました。

エラー解析

分析する 一般的にこのエラーの最初の数字は、エラーが発生した行を指します。例えば、ここでのヒントは、コードエラーが34行目にあったということなので、投稿されたコードの34行目あたりのエラーを探せばいいのです。

エラーの記録

今日行われた典型的なミスを、次のコードで記録します。

 int f(vector
 vec)
 {
     if(!vec.empty())
         return vec[0];
 }


この関数はVSで実行すると間違いなくエラーフリーです。VSのデバッグで実行すると、コンパイラがエラーをチェックし、問題なく修正するのを助けてくれるからです。しかし、リリース下で実行すると、問題が発生します。この関数では、vecが空の場合、関数は戻り値を持ちませんが、関数は戻り値を持たなければならないので、エラーはこの場所にあります。
正しい修正:判定条件に関係なく、関数の戻り値条件を満たすことができる。

 int f(vector
 vec)
 {
     if(!vec.empty())
         return vec[0];
     else
         return 0.
 }