Закрытая переменная должна быть инициализирована только в конструкторе. Как? - PullRequest
4 голосов
/ 20 июля 2010

У меня есть класс Foo с конструктором, который нуждается в аргументах, и другой класс Bar с Foo закрытой переменной

 class Foo 
 {
      public:
      Foo(string);
 }

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

      private:
      Foo foo;
 }

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

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

Ответы [ 2 ]

9 голосов
/ 20 июля 2010

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

Bar::Bar() : foo("test") {
   // stuff
}
7 голосов
/ 20 июля 2010

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

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

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

...