C プログラミングでは、関数の宣言と定義の戻り値の型が void であるにもかかわらず、関数本体に return 文が存在するという問題に遭遇することがあります。 void 関数には return ステートメントを使用できないため、コンパイル エラーが発生します。では、この問題をどうやって解決すればよいでしょうか?この記事ではそれについて詳しく説明します。
まず、このエラーのサンプル コードを見てみましょう:
void func() { // ... return 1; // ... }
このコードでは、戻り値の型が void の関数 func を定義します。ただし、関数本体内では、戻り値 1 の return ステートメントが使用されます。この場合、コンパイラはコードを渡すことができず、エラーを報告します。
error: return-statement with a value in function returning 'void' [-Werror,-Wreturn-type]
このエラーは、戻り値の型が void の関数では return ステートメントを使用できないことを示します。
それでは、どうやって解決すればいいのでしょうか?実際には非常に簡単で、return ステートメントから戻り値を削除するだけです。変更されたコードは次のとおりです。
void func() { // ... return; // ... }
ここで、return 1 を return に変更します。これは、値が返されないことを意味します。このように、関数は戻り値の型が void であるという要件を満たしており、コンパイラはそれを正常に渡すことができます。
この問題は、return ステートメントに加えて、他の場所でも発生する可能性があります。たとえば、関数内で戻り値の型が void のローカル変数を定義し、関数内で return ステートメントを使用してローカル変数の値を返す場合も、コンパイル エラーが発生します。この場合、ローカル変数の戻り値の型を別の型に変更する必要があります。
さらに、C 11 で導入された auto キーワードを使用して関数の戻り値の型を推測する、より良い解決策があります。これにより、戻り値の型を手動で指定する必要がなくなります。例:
auto func() { // ... return 1; // ... }
この例では、auto キーワードを使用して関数の戻り値の型を推測します。関数内では return 1 ステートメントが整数値を返すために使用されているため、コンパイラは戻り値の型を int に推測します。
つまり、C の記述で void を返す関数に遭遇したが、return ステートメントにエラーがある場合、return ステートメントの値を削除するか、auto キーワードを使用して確実に実行することで、この問題を解決できます。関数が void 型の戻り値要件に準拠していること。
以上がC++ コンパイル エラー: 関数は void を返しますが、return ステートメントがあります。解決方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。