Как вы используете конструктор, отличный от стандартного для члена?

У меня есть два класса

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 создавался с помощью (int i) вместо того, чтобы искать конструктор по умолчанию? В принципе, я хочу управлять вызовом конструктора изнутри b-конструктора.

Ответ 1

Вам нужно вызвать (int) явно в списке инициализаторов конструктора:

b() : aInstance(3) {} 

Где 3 - начальное значение, которое вы хотели бы использовать. Хотя это может быть любой int. См. Комментарии к важным заметкам о порядке и других оговорках.

Ответ 2

Используйте список инициализации:

b::b() : aInstance(1) {}

Ответ 3

Просто используйте конструктор, который определяется следующим образом:

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

Ответ 4

Я думаю, вы должны использовать указатель на "a":

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

Таким образом, вы будете определять поведение. Конечно, вам нужно будет освободить * aInstance в деструкторе.