在构造函数中使用对象初始化类

时间:2016-02-11 03:31:46

标签: c++

我的标题类看起来像 -

class Dog {
private:
    Owner _owner;

public:

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

然后我收到错误的部分是 -

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

看起来很简单但是当我编译时我得到了这个错误而且我真的不知道为什么 -

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

关于我可以修复的任何想法?我是C ++的新手,所以我猜我错过了与语法相关的东西

1 个答案:

答案 0 :(得分:2)

调用此构造函数时

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

首先使用默认构造函数_owner构造实例变量Owner(),然后使用`this - >分配它。 _owner = owner;。

所以你必须有一个默认的构造函数才能实现,正如你的错误所说,没有可用的构造函数。所以你必须像这样定义并公开:

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

OR 您只需使用

调用复制构造函数Owner(const Owner& owner)而不是Owner()的默认构造函数
Dog::Dog(Owner owner)
 : _owner(owner)
{ }