2012-11-09 80 views
1

當我試圖填充一個二維數組充滿了我創建的類的對象時,我有一個問題。錯誤是:C++編譯器錯誤C2679:二進制'=':沒有找到運算符

error C2679: binary '=' : no operator found which takes a right-hand operand of type 'Cell *' (or there is no acceptable conversion) 

生成錯誤是如下所述的代碼:

從main.cpp中摘錄自cell.hpp

class Cell 
{ 
public: 
    Cell(); 
    int live; 
    int neighbours; 
}; 

摘錄

Cell cells[80][72]; 

for(int x = 0; x < 80; x++){ 
    for(int y = 0; y < 72; y++){ 
     cells[x][y] = new Cell(); 
    } 
} 

摘錄from cell.cpp

Cell::Cell() 
{ 
    srand(time(0)); 
    this->live = rand() % 2; 
    this->neighbours = 0; 
} 

我懷疑我需要在Cell類的構造函數上進行某種重載,但我不知道如何爲這種情況實現一個類。

+0

'Cell * cells [80] [72];' – jclin

+0

您需要一個'Cell' __pointers__數組或者'Cell' __objects__數組嗎?我假設你在這種情況下實際上並不想使用'new'。你也不想在'Cell'構造函數中調用'srand()'。只需在'main()'中調用'srand()'一次。 – Blastfurnace

+0

不要使用'new'。如果你真的需要,可以使用管理動態內存的東西。 – chris

回答

0

由於Cell具有參數構造語句

Cell cells[80][72]; 

限定Cell對象的80x72陣列。這些對象已經爲您構建,因此嵌套的for循環是不必要的。

在另一方面,如果你申報Cell爲指針的80x72陣列Cell,即

Cell* cells[80][72]; 

然後,你必須去分配每一個像你正在試圖做的。 如果你實際上不需要使用指針,那麼不要。

+0

是的,事實證明,該陣列已經填充。 – user1810898

0

試試這個:

Cell *cells[80][72] = {} 

您可以使用只爲指針。

0

你正在做新的Cell你創建一個Cell *。 順便說一句,當你寫單元格[X] [Y]時,沒有其他東西可以分配。

你會做一個新的,如果你有:

cell ** matrix = new cell[X]; 
for(int i=0;i<X;i++){ 
    matrix[i]=new cell[Y]; 
} 

但是在這裏,在你發送的代碼,它是沒用的,做「填充」,細胞已經在那裏和分配

相關問題