0

我有一个对象(单元格类型),它存储指向相同类型的其他对象的指针列表(网格上它的邻居)。

这是一个 2D 网格.. 作为视觉效果,见下文:

xxc
xcc
ccx

最中心的“c”将是一个活细胞,它位于它的东北、东、南和西南。它的邻居列表将具有指向这些单元格的指针,然后指向其他方向的 Null 指针。它看起来像这样:neighbors = {null,pointer,pointer,null,pointer,null,pointer,null)(列表的顺序是 North,East,South,West,NorthEast,SouthEast,SouthWest,NorthWest)。

如果一个新的单元格移动到它的相邻位置,例如移动到这个单元格的西边,它现在看起来像这样:

xxc
ccc
ccx

我需要更新邻居列表,所以它现在有一个指向其西方单元格的指针,然后西方单元格需要更新它的所有邻居说“你好!我在这里!你现在有我作为邻居”。所以西方细胞会检查它自己的指针列表,并在每个指针上说“更新你的列表,将我作为你的邻居”。我试图将“我”指针作为指向自身的指针传递。这是代码..

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 [数字],你需要把这个指向我的指针放在你的邻居列表中”。我不确定如何将指针传递给自己。

有什么想法吗?抱歉,这太混乱了……

4

1 回答 1

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...
于 2013-10-25T20:07:03.003 回答