2016-02-11 2 views
-1

Мой класс заголовок выглядит как-Инициализация класса с объектом в конструкторе

class Dog { 
private: 
    Owner _owner; 

public: 

    Dog(Owner o); 
    ~Dog(); 
}; 

Тогда часть, где я получаю ошибку

IS-
Dog::Dog(Owner owner){ 
    this -> _owner = owner; 
} 

Это кажется простым, но когда я компилирую, я получаю эту ошибку и я действительно не знаю, why-

Constructor for 'Dog' must explicitly initialize the member '_owner' which does not have a default constructor

Любой идеи о том, что я могу исправить? Я новичок в C++, так им угадать, что им не хватает чего-то синтаксис, связанный

+0

Использовать [член списка инициализатор] (http://en.cppreference.com/w/cpp/language/initializer_list). – Cornstalks

+0

Пожалуйста, не указывайте ничего, что начинается с '_'. Вместо этого используйте trailing '_', если вам нужно. – user3528438

+0

@Cornstalks, объект 'owner' уже инициализирован в моем основном методе. Я просто передаю данные этому классу. – Jordan

ответ

2

Когда конструктор вызывается

Dog::Dog(Owner owner){ 
    this -> _owner = owner; 
} 

Первый экземпляр переменной _owner построен с конструктором по умолчанию Owner(), то он назначается с ` это -> _owner = owner ;.

Итак, у вас должен быть конструктор по умолчанию, чтобы это произошло, как говорит ваша ошибка, нет ни одного доступного. так что вы должны определить его как так и обнародует его:

class Owner { 
    public: 
    Owner(){ } 
}; 

ИЛИ вы можете просто вызвать конструктор копирования Owner(const Owner& owner) вместо конструктора по умолчанию Owner() с

Dog::Dog(Owner owner) 
: _owner(owner) 
{ } 
+0

Как только я отредактировал класс владельца, ошибка исчезла. Спасибо! – Jordan

+0

@Alex Я предлагаю вам сделать еще 2-е решение. Рекомендуется инициализировать элементы в конструкторе – KABoissonneault

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