2010-07-19 2 views
4

У меня есть класс с именем Foo с конструктором, который нуждается в аргументах, и другой класс Bar с Foo частных переменнойЧастная переменная должна быть инициализирована только в конструкторе. Как?

class Foo 
{ 
     public: 
     Foo(string); 
} 

class Bar 
{ 
     public: 
     Bar() { this->foo = Foo("test") } 

     private: 
     Foo foo; 
} 

Однако, когда я пытаюсь скомпилировать это, я получаю ошибку компиляции, что там нет Foo::Foo() конструктор. Похоже, что приватная переменная foo в классе Bar инициализируется перед получением значения, назначенного в конструкторе.

Как я могу получить приватную переменную foo, которая ждет инициализации в моем конструкторе?

ответ

9

Вам необходимо использовать список инициализаторов. Если вы этого не сделаете, ваш код вызовет конструктор по умолчанию для этого объекта.

Bar::Bar() : foo("test") { 
    // stuff 
} 
+0

Отлично, попробуем. – Peterdk

+0

Да, это сработало. – Peterdk

7

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

Bar() : foo("test") {} 

Кстати, в C++ причинам использовать this-> редкие (и часто указывают на другие проблемы).

+0

Хорошо, да, я пришел из java, C# и только начал попробовать какой-то C++. Поэтому мое this-> использование. :) – Peterdk