オーバーロードされたコンストラクターとクラス メンバーのアクセス エラー
2 つのコンストラクター (1 つは引数なし、もう 1 つは単一の整数引数を持つ) を持つクラスを考えます。後者のコンストラクター関数を意図どおりに使用してオブジェクトを作成しているときに、引数なしのコンストラクターを使用するとエラーが発生します。
たとえば、次のコード スニペットをコンパイルすると、
class Foo { public: Foo() {}; Foo(int a) {}; void bar() {}; }; int main() { // This works... Foo foo1(1); foo1.bar(); // This fails... Foo foo2(); foo2.bar(); return 0; }
次のエラーが生成されます。 :
error: request for member 'bar' in 'foo2', which is of non-class type 'Foo ()()'
このエラーは、コンパイラーがコード Foo foo2(); を解釈するために発生します。名前が「foo2」、戻り値の型が「Foo」の関数宣言として。ただし、引数なしのコンストラクターを使用して 'Foo' 型のオブジェクトをインスタンス化しようとしています。
この問題を解決するには、Foo foo2(); を変更します。 Foo foo2; に。この変更により、デフォルトのコンストラクターを使用してオブジェクトを作成することがコンパイラーに通知されます。
あるいは、引数なしのコンストラクターと単一引数のコンストラクターの両方が存在するため、オーバーロードされたコンストラクターのあいまいさを示すエラーが発生する可能性があります。 。このような場合は、Foo foo2{}; を使用して引数なしのコンストラクターを明示的に呼び出します。曖昧さを解決します。
以上が引数のないコンストラクターが「メンバーの要求」エラーを引き起こすのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。