在initializer_list范围内进行循环

Loop for in range of initializer_list

本文关键字:循环 范围内 list initializer      更新时间:2023-10-16
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++;
    }
}

和错误:

'初始化':无法从" const 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);

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

您的类Book不是从常数值构造的,因为其副本和移动构造函数都需要可变的值。

您要么不能使用初始化列表来传达Book s的列表,要么需要重新设计类,以便可以从恒定值构造。