0

次のクラス宣言を使用しています。

class A {
public:
    A(int, float);
    A(const A&);
};

class B {
public:
    B(A&);
protected:
    A a;
};

また、Bに対して次の定義を設定しました。

B::B(A &a) {
    this->a = a;
}

問題は、Bコンストラクターの定義にエラーがあり、が存在することを示していることですNo matching function for call to A::A()

Bコンストラクターが新しいAを作成しようとするのはなぜですか?

前の手順が必要な場合、参照を使用してコピーコンストラクターを呼び出さないのはなぜですか?

4

1 に答える 1

3

私はあなたが構築する必要があるをB持っていると思います。A現在のコンストラクターでは、使用するコンストラクターを明示的に指定していませんA。したがって、A存在しないデフォルトのコンストラクターを試します。

たぶんあなたは参照でBのAを構築するつもりでしたか?

class B {
private:
    A _a;
public:
    B(A& a) : _a(a) {}

};
于 2012-12-10T21:10:53.470 に答える