2016-01-28 2 views
2

Я новичок в C++, но у меня есть предыдущий опыт программирования в PHP и C# (OOP). Что у меня есть: два класса, один из которых имеет частную собственность с типом другого класса. Источник:Объявление свойства в классе, который имеет тип другого в C++

class Foo 
{ 
    public: 
     Foo(int n) 
     { 

     } 
}; 

class Bar 
{ 
    private: 
     Foo foo; 

    public: 
     Bar() 
     { 
      this->foo = Foo(10); 
     } 
}; 

Bar bars[123]; 

То, что я пытаюсь сделать, это объявить свойство Foo с конструктором в Bar. К сожалению, способ, которым я это сделал, не работает. Он дает ряд ошибок, например.

без функции согласования для вызова 'Foo :: Foo()'

Как заставить его работать? Спасибо за ваш ответ.

ответ

4

Вы должны инициализировать Foo должным образом в member initialization list, например, так:

class Bar 
{ 
    private: 
     Foo foo; 

    public: 
     Bar() : 
      foo(10) 
     {} 
}; 

В противном случае происходит то, что компилятор сначала пытается инициализировать this->foo с конструктором по умолчанию, прежде чем попасть в тело вашего конструктора. Поскольку Foo не имеет одного, он не компилируется.

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