12

私は2つのクラスを持っています

class a {
    public:
        a(int i);
};

class b {
    public:
        b(); //Gives me an error here, because it tries to find constructor a::a()
        a aInstance;
}

デフォルトのコンストラクターを検索しようとする代わりに、aInstanceインスタンス化されるようにするにはどうすればよいですか? 基本的に、のコンストラクター内から のコンストラクターのa(int i)呼び出しを制御したい。ab

4

5 に答える 5

24

コンストラクター初期化子リストで a(int) を明示的に呼び出す必要があります。

b() : aInstance(3) {} 

3 は、使用する初期値です。それは任意のintである可能性がありますが。注文に関する重要な注意事項やその他の注意事項については、コメントを参照してください。

于 2010-01-18T20:26:55.670 に答える
3

初期化リストを使用します。

b::b() : aInstance(1) {}
于 2010-01-18T20:27:39.427 に答える
0

次のように定義されたコンストラクターを使用するだけです。

class b {
public:
    b()
    : aInstance(5)
    {}
    a aInstance;
};
于 2010-01-18T20:28:08.573 に答える
-2

次のような「a」へのポインターを使用する必要があると思います。

class b {
public:
    b() : aInstance(new a(5)) {}
    a *aInstance;
};

このようにして、動作を定義します。もちろん、デストラクタで *aInstance を解放する必要があります。

于 2010-01-18T21:06:04.393 に答える