2015-05-21 58 views
-1

我有一個名爲Book的類包含來自類Author的對象。 Book的構造函數是一個私有字段,所以我不能使用這個類來定義對象,所以我有另一個名爲BookBuilder的類,Book和Author的朋友幫助我做到這一點。錯誤:沒有匹配的函數調用,在靜態函數中

如果我刪除靜態功能問題消失。

的問題是:

error: no matching function for call to 'Author :: Author() 

其實我沒有作者的默認構造函數

class Book { 

public: 

    friend class BookBuilder; 
    // ... other functions 
private: 

    Book(const std::string title, const std::string publisher,const Author& author, const std::string genre, int isbn, double price):title_(title),publisher_(publisher),author_(author),isbn_(isbn),price_(price),genre_(genre){} 
    std::string title_; 
    std::string publisher_; 
    Author author_; 
    double price_; 
    int isbn_; 
    std::string genre_; 
}; 

class BookBuilder { 

public: 

    static BookBuilder start(){return BookBuilder();} 
    // ... other functions 

private: 
    std::string title_; 
    std::string publisher_; 
    Author author_; 
    double price_; 
    int isbn_; 
    std::string genre_; 
}; 
+0

_「錯誤:沒有匹配函數調用'Author :: Author()|事實上,我沒有部門Auhtor默認構造函數」_好吧,你不只是回答自己的問題? –

回答

1

BookBuilder::start方法是

static BookBuilder start(){ return BookBuilder(); } 

這將嘗試返回默認構造的BookBuilder。這個類有一個成員

Author author_; 

所以,當你試圖建立一個BookBuilder,它會嘗試默認初始化成員,包括默認初始化你auther_在這種情況下。因此Author需要一個默認的構造函數才能工作。

+0

如果我不能添加一個Default構造函數,還有另一種方法來處理這個問題! –

+0

如果你不能在'Author'中添加一個默認的構造函數,那麼'BookBuilder'的默認構造函數需要使用任何構造函數來構造它的'Author'成員。 – CoryKramer

相關問題