在initializer_list范围内循环

时间:2017-03-15 21:52:51

标签: c++ object initializer-list

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++;
    }
}

错误:

  

&#39;初始化&#39;:无法转换为&#39; const Book&#39;到&#39;预订&#39;

  

无法复制构建类&#39; Book&#39;由于模糊复制构造函数或没有   可用的复制构造函数

我的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 个答案:

答案 0 :(得分:0)

std::initializer_list<T>的迭代器为const T*,因此基于范围的循环生成的值为const T,或者在您的情况下为const Book

然而,您的类Book 不能可以从常量值构造,因为它的副本及其移动构造函数都需要可变值。

您要么无法使用初始化列表来传达Book的列表,要么需要重新设计您的类,以便可以从常量值构建它。