2016-03-23 2 views
4

У меня есть следующий код (файл заголовка):Как инициализировать параметры конструктора члена в C++

class InnerClass 
{ 
    InnerClass(int var); 
} 

class BigClass 
{ 
    BigClass(); 
    InnerClass member(5); 
} 

Как можно инициализировать параметр элемента в BigClass до 5 (приведенный выше код генерирует ошибку, как вы, наверное, догадались)? Если я поместил строку члена InnerClass (5) в файл кода (не заголовок), то проблем не возникнет.

+0

Возможный дубликат [Почему инициализатор C++ 11 in-class не может использовать круглые скобки?] (Http://stackoverflow.com/questions/24836526/why-c11-in-class-initializer-cannot-use-parentheses) – cpplearner

+0

Да @cpplearner, часть этой ссылки отвечает на мой вопрос. Но я считаю, что мой вопрос (и принятый ответ) более прямолинейный. Также принятый ответ четко показывает разницу с синтаксисом C++ 11. – dumbprog

ответ

4

Вы можете инициализировать переменную-член BigClass::member по in-class brace-or-equal initializer (с C++ 11):

InnerClass member{5}; 

или member initializer list:

class BigClass 
{ 
    InnerClass member; 
public: 
    BigClass() : member(5) {} 
    // or... BigClass(int var) : member(var) {} 
} 

BTW: Я полагаю, что конструктор InnerClass должен быть публичным ,

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