2017-03-15 56 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的列表,或者您需要重新设计您的类,以便可以从常量值构造它。