2017-03-15 4 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++; 
    } 
} 

und Fehler:Schleife für in Bereich von initializer_list

'Initialisierung': kann nicht

von 'const Buch' auf 'Book' konvertieren

und:

Die Konstruktklasse 'Buch' kann aufgrund mehrdeutiger Kopierkonstruktoren oder verfügbarer Kopierkonstruktor

0 nicht kopiert werden

Meine book.h Konstrukteuren

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

Post kompilierbaren Code. –

+1

'Book & operator = (const Buch & alt)' und 'Buch (const Buch & old);'. – Jarod42

+0

Ihr Titel ist irreführend. Es gibt keine Schleife in der * Initialisierungsliste *. Es gibt eine Schleife im * Konstruktor *. Die Initialisierungsliste ist: ': size {list.size()}' –

Antwort

0

Der Iterator eines std::initializer_list<T> ist const T*, so dass die bereichsbasierte Schleife erzeugt Werte von const T oder in Ihrem Fall const Book.

Ihre Klasse Book ist jedoch nicht Konstruierbar von konstanten Werten, da sowohl die Kopie als auch der Move-Konstruktor veränderbare Werte erfordern.

Sie können entweder keine Initialisierungsliste verwenden, um eine Liste von Book s zu kommunizieren, oder Sie müssen Ihre Klasse so umgestalten, dass sie aus einem konstanten Wert erstellt werden kann.

Verwandte Themen