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

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

Linda Hamilton
リリース: 2024-12-08 21:26:11
オリジナル
533 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート