複雑な解析エラー: コンストラクター引数のかっこの難問を解く
謎めいたエラー メッセージ「request for member 'function1'」が発生したとき「myObj」内。これは非クラス型「MyClass」です。 ()()'" C プログラムをコンパイルしようとしているときに、開発者はこの複雑な解析エラーの背後にある理由を熟考していることに気づくかもしれません。問題のソース コードには、次の行を使用して宣言された引数のないコンストラクターを持つクラスが含まれています:
MyClass myObj();
コンパイル プロセスを実行すると、前述のエラーが表示され、メンバー関数 'function1' を実行できないことが示されます。 「myObj」は非クラス型として認識されるため、オブジェクト「myObj」を介してアクセスできます。この問題を解決するには、コードを次のように変更します。
MyClass myObj;
これにより、コンストラクター宣言に引数がない場合に括弧を省略する必要があるかどうかという疑問が生じます。括弧を使用した空のコンストラクター宣言は C で以前から使用されてきましたが、言語標準は断固たる姿勢をとりました。提供されたコードのようなあいまいさは、関数宣言を優先して一貫して解決されています。
注意することが重要です。新しい式内や、値が初期化された一時オブジェクトの構築中など、特定のシナリオでは空の括弧初期化子が許可されます。ただし、引数のないコンストラクター宣言の場合、標準では括弧の省略が厳しく規定されています。これにより明確さが確保され、構文の曖昧さから生じる可能性のある混乱が防止されます。
以上がコンストラクター宣言で引数なしで括弧を使用できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。