2017-03-15 29 views
-1
Library::Library(std::initializer_list<Book> list) 
    : size{ list.size() } 
{ 
    std::size_t i = 0; 
    for (Book b : list) 
    { 
     insertBook(actual, b); 
     actual = next(actual); 
     size++; 
    } 
} 

和錯誤的範圍:循環爲initializer_list

'初始化':

:不能從 '常量書',以 '書'

和轉換由於含糊不清的拷貝構造函數,無法複製構造類'Book'或不可用 可用拷貝構造函數

我book.h構造

Book(); 
Book& operator=(Book& old); 
Book& operator=(Book&& old); 
Book(std::string& author, std::string& title) :author(author), title(title) 
{ 
    std::cout << "l-Referencja" << std::endl; 
} 
Book(std::string&& author, std::string&& title) :author(author), title(title) 
{ 
    std::cout << "r-Referencja" << std::endl; 
} 
Book(Book& old); 
Book(Book&& old); 
+1

發佈可編譯代碼。 –

+1

'Book&operator =(const Book&old)'和'Book(const Book & old);'。 – Jarod42

+0

您的標題有誤導性。* initializer list *中沒有循環。*構造函數*有一個循環。是:':size {list.size()}' –

回答

0

一個std::initializer_list<T>的迭代是const T*,所以基於範圍的環路產生的const T值,或者在你的情況,const Book

然而,您的類Book而不是可以從常量值構造,因爲它的副本和其移動構造函數都需要可變值。

您不能使用初始化程序列表來傳遞Book的列表,或者您需要重新設計您的類,以便可以從常量值構造它。