コンストラクター呼び出しエラー: 「非クラス型のメンバーのリクエスト」について
特定のコンストラクター パラメーターを使用してオブジェクトをインスタンス化するときに、プログラマが遭遇する可能性があるエラー「非クラス型である '..' のメンバー '..' を要求します。」このエラーを効果的に解決するには、このエラーの原因を理解することが重要です。
提供されているコード例は、問題を示しています。クラス Foo には 2 つのコンストラクターがあります。引数のないデフォルトのコンストラクターと、単一の整数パラメーターを受け入れるコンストラクターです。意図どおりにパラメーター化されたコンストラクター関数を使用して foo1 をインスタンス化します。ただし、デフォルトのコンストラクターを呼び出すとコンパイル エラーが発生します。
これはなぜ発生しますか?構文
Foo foo2();
は、それ自体を関数宣言として誤解します。コンパイラーは、これを、戻り値の型が Foo である foo2 という名前の関数を宣言していると認識し、括弧に基づく引数を期待します。ただし、目的は、引数をとらないデフォルトのコンストラクターを使用して foo2 という名前のオブジェクトをインスタンス化することです。
その結果、コンパイラーは foo2 を Foo() という名前の非クラス型として指定します。この指定により、Foo クラス内で定義されたメソッドへのアクセスが妨げられるため、foo2.bar() の呼び出しが無効になります。
このエラーを修正するには、構文を次のように調整する必要があります。
Foo foo2;
括弧を省略すると、コンパイラは
Foo foo2
を foo2 のオブジェクト宣言として解釈します。デフォルトのコンストラクターを使用します。これにより、Foo 型のオブジェクトが正常にインスタンス化され、bar() などのそのメンバー関数にアクセスできるようになります。
以上がなぜ「Foo foo2();」なのか「非クラス型のメンバーの要求」エラーが発生しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。