Как вы используете конструктор не по умолчанию для члена? - PullRequest
11 голосов
/ 18 января 2010

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

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) вместо попытки поиска конструктора по умолчанию? По сути, я хочу контролировать вызов конструктора a из конструктора b.

Ответы [ 4 ]

22 голосов
/ 18 января 2010

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

b() : aInstance(3) {} 

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

3 голосов
/ 18 января 2010

Использовать список инициализации:

b::b() : aInstance(1) {}
0 голосов
/ 19 января 2010

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

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

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

0 голосов
/ 18 января 2010

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

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