簡體   English   中英

在構造函數中用對象初始化類

[英]Initializing class with object in constructor

我的標頭類看起來像-

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 ++的新手,所以我想我錯過了一些語法相關的內容

調用此構造函數時

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

首先,實例變量_owner使用其默認的構造函數Owner()構造,然后為其分配`this-> _owner = owner;。

因此,您必須具有默認的構造函數才能執行此操作,正如您的錯誤所述,沒有可用的構造函數。 因此,您必須像這樣定義它並使其公開:

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

或者,您可以簡單地調用復制構造函數Owner(const Owner& owner)而不是Owner()的默認構造函數,

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM