2011-02-17 61 views
1

在下面的代碼,我試圖用一個for環路初始化的部件使用從字符串數組(在這種情況下的數字用於測試目的)Array採取命名的類book的五Name對象。問題填充動態創建的陣列

#include <iostream> 
#include <string> 
using namespace std; 

class book 
{ 
private: 
    string Name; 
public: 
    book(); 
    book(string&); 
}; 

book :: book() 
{} 

book :: book(string& temp) 
{ 
    Name = temp; 
} 

int main() 
{ 
    string Array[] = {"1", "2", "3", "4", "5"}; 
    book *BookList = new book[5]; 
    for (int count = 0; count < 5; count ++) 
    { 
     BookList[count] = new book(Array[count]); 
    } 
    return 0; 
} 

然而,每當我試圖編譯代碼時,我得到了以下錯誤:

main.cpp: In function ‘int main()’: 
main.cpp:28: error: no match for ‘operator=’ in ‘*(BookList + ((unsigned int)(((unsigned int)count) * 4u))) = (operator new(4u), (<statement>, ((book*)<anonymous>)))’ 
main.cpp:6: note: candidates are: book& book::operator=(const book&) 

我的目的是創建一個使用私有成員的值,將只有一次的被稱爲對象的數組循環收集相關數據。我遵循answer #2 to a question I asked here previously提供的建議。

+0

看起來你正在製作一個`BookList`數組並嘗試用`book`對象初始化它。 – Argote 2011-02-17 23:53:56

回答

5
book *BookList = new book[5]; 

BookList爲五個book對象的數組。

BookList[count] = new book(Array[count]); 

您正在嘗試使用BookList就好像它是五個指針數組book對象。

BookList[count]不是指針到countbook,它countbook

您是否考慮過使用其中一個標準庫容器,如std::vector

std::vector<book> BookList(5); 

,或者,如果你不想插入book s,至你知道它們是什麼,你可以用0初始大小(刪除(5)初始化)和push_backinsert書在創建它需要。

0
BookList[count] = new book(Array[count]); 

你基本上是這樣做的:book = book*這顯然不行,因爲它們是不同的類型。您可以刪除new關鍵字:

BookList[count] = book(Array[count]); 

這將創建一個臨時book對象,並將其分配給在書目的書籍之一。