ホームページ >バックエンド開発 >C++ >C++ 構文エラー: 関数内での関数定義は許可されていません。修正方法は?

C++ 構文エラー: 関数内での関数定義は許可されていません。修正方法は?

PHPz
PHPzオリジナル
2023-08-21 23:28:532623ブラウズ

C プログラミングでは、さまざまな構文エラーに何度も遭遇します。より一般的な問題の 1 つは、関数内で関数を定義することです。ご存知のとおり、関数の定義は通常、グローバル スコープで行われます。ただし、関数内で関数を定義することは C では許可されていないため、この構文エラーが発生すると、コンパイラーはコードを渡すことができなくなります。

この問題の原因は、関数内の定義により、コンパイラがそのスコープを認識できないことです。特に内部関数と外部関数のパラメータ名が同じ場合、コンパイラが混乱する可能性があります。したがって、この問題を解決するには、内部関数の定義をそれが含まれている関数の外に移動し、外部関数の外側で定義する必要があります。

この問題を解決する方法を説明しましょう。たとえば、次のプログラムでは、整数の 2 乗を計算する関数 int square(int x) を定義します。この関数の内部定義では外部関数のパラメーター名が使用されており、それらが適切なスコープに配置されていませんでした。

#include<iostream>
using namespace std;

int main()
{
    int x = 5;
    int square(int x)
    {
        return x * x;
    }
    int result = square(x);
    cout << "The square of " << x << " is " << result << endl;
    return 0;
}

このプログラムをコンパイルすると、コンパイラは次のエラーを生成します:

error: expected constructor, destructor, or type conversion before ‘(’ token
int square(int x)

この問題を解決するには、内部関数を移動して外部関数の外側に配置する必要があります。修正されたプログラムは次のとおりです。

#include<iostream>
using namespace std;

int square(int x)   //将函数square()移到外部函数之外
{
    return x * x;
}

int main()
{
    int x = 5;
    int result = square(x);
    cout << "The square of " << x << " is " << result << endl;
    return 0;
}

さて、関数 square() を外部関数の外に移動し、その内部定義を削除しました。このようにして、プログラムを正常にコンパイルして実行できます。

構文エラーを修正するときは、関数定義に対する C の要件と制限を常に念頭に置く必要があります。関数定義を適切なスコープに配置すると、いくつかの一般的な構文エラーを回避できます。コードを記述するときは、注意深く厳密に、プログラムが正常に動作するように、起こり得る問題に常に注意を払う必要があります。

以上がC++ 構文エラー: 関数内での関数定義は許可されていません。修正方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。