2013-10-25 62 views
0

我有一個對象(類型單元格)存儲指向其他對象相同類型(網格上的鄰居)的指針列表。我可以在函數中傳遞一個指向自己的指針嗎?

這是一個2D網格..作爲視覺,見下圖:

xxc 
xcc 
ccx 

的「C」,在市中心將是一個活的細胞,且具有向東北,華東,華南和它的西南部。它的鄰居列表會有指向這些單元的指針,然後是其他方向的空指針。它看起來像這樣: neighbors = {null,pointer,pointer,null,pointer,null,pointer,null) (列表的順序是North,East,South,West,NorthEast,SouthEast,SouthWest,NorthWest)。

如果一個新的小區中移動到其鄰近的位置,例如移動到該小區的西側,它現在應該是這樣的:

xxc 
ccc 
ccx 

我需要更新的鄰居列表,所以它現在有一個指向它的西方細胞,然後西方細胞需要更新所有的鄰居說「你好!我在這裏!你現在有我作爲鄰居」。所以西方的細胞會通過它自己的指針列表,每個人都說「用ME作爲你的鄰居更新你的列表」。我試圖傳遞「我」指針作爲指向它自己的指針。這裏是代碼..

int Cell::updateAllNeighbours(){ 
    //Need a pointer to myself... 
    Cell * temp = &this; //how do I do this??? 
    for (int i=0; i<NUM_NEIGHBOURS; i++){ 
     if (neighbours[i] != NULL) { 
      if (i==0) 
       neighbours[i]->updatedNeighbour(2, temp); 
      else if(i==1) 
       neighbours[i]->updatedNeighbour(3, temp); 
      else if(i==2) 
       neighbours[i]->updatedNeighbour(0, temp); 
      else if(i==3) 
       neighbours[i]->updatedNeighbour(1, temp); 
      else if(i==4) 
       neighbours[i]->updatedNeighbour(6, temp); 
      else if(i==5) 
       neighbours[i]->updatedNeighbour(7, temp); 
      else if(i==6) 
       neighbours[i]->updatedNeighbour(4, temp); 
      else if(i==7) 
       neighbours[i]->updatedNeighbour(5, temp); 
     } 
    } 
} 

所以我想打電話給updatedNeighbour功能,並說:「在位置x [數字],你需要把這個指針,我在你的鄰居列表」。我不知道如何傳遞給我自己的指針。

有什麼想法?對不起,這是如此令人困惑......

+5

肯定。但它是'this',而不是'&this'。 – paulsm4

+0

對這樣簡單的問題太多解釋!用一些最小的樣品擊中指甲。 –

+0

哦,我的天啊,你是對的。我無法在網上找到它,所以我認爲這是一些狂野的事情,人們不知道我的意思......謝謝paulsm4 – jcam77

回答

0

this是一個指針,而不是一個參考。所以這個(沒有雙關語)代碼:

Cell * temp = &this; 

應該是:

Cell * temp = this; 

除此之外,你不需要temp可言,看來:

if (neighbours[i] != NULL) { 
    if (i==0) 
    neighbours[i]->updatedNeighbour(2, this); 
    else if(i==1) 
    neighbours[i]->updatedNeighbour(3, this); 
    // etc... 
相關問題