0

同じタイプの他のオブジェクトへのポインターのリストを格納するオブジェクト (タイプ Cell) があります (グリッド上の隣接オブジェクト)。

これは 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

隣人リストを更新して、西側セルへのポインターを持たせる必要があります。次に、西側セルはすべての隣人を更新して、「こんにちは! 私はここにいます! あなたは私を隣人として持っています」と言う必要があります。したがって、西側のセルは独自のポインターのリストを調べ、それぞれで「私を隣人としてリストを更新してください」と言います。「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 [数値] の位置に、このポインターを隣人リストに入れる必要があります」と言おうとしています。ただし、自分自身にポインターを渡す方法がわかりません。

何かご意見は?すみません、これはとても紛らわしいです...

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 に答える