ホームページ >バックエンド開発 >C++ >引数のないコンストラクターが「メンバーの要求」エラーを引き起こすのはなぜですか?

引数のないコンストラクターが「メンバーの要求」エラーを引き起こすのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-08 21:26:11507ブラウズ

Why Does My No-Argument Constructor Cause a

オーバーロードされたコンストラクターとクラス メンバーのアクセス エラー

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 サイトの他の関連記事を参照してください。

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