2010-09-04 2 views
4

, допустим, у меня есть класс A и класс B. B используется как член в A. B не имеет конструктора по умолчанию, а имеет тот, который требует параметра.C++ вызов конструктора не по умолчанию в качестве члена

class B { 
    B(int i) {} 
}; 


class A { 

B m_B; 

A() 
{ 
    m_B(17); //this gives an error 
} 

}; 

Как я могу использовать B как член в A?

ответ

13

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

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

class A { 
    B m_B; 
    public: 
    A() : m_B(17) {} 
}; 

BTV, чтобы сбросить m_B где-то за пределы конструкторы, правильный синтаксис:

m_B = B(17); 
+0

В этом примере, если что последняя строка 'M_B = В (17)' назывались от ' A() ', конструктор по умолчанию' B' по-прежнему вызывает вызов? Если да, есть ли способ предотвратить это? –

+0

@Steven: (1) Да. (2) Используйте список инициализации для инициализации 'm_B'. – kennytm

Смежные вопросы