У меня есть объект (тип Cell), который хранит список указателей на другие объекты того же типа (соседи по нему на сетке).
Это 2D-сетка.. как визуальная, см. Ниже:
xxc
xcc
ccx
"C" в самом центре будет живой клеткой, и она имеет северо-восток, восток, юг и юго-западнее этого. В этом списке соседей будут указатели на эти ячейки, а затем нулевые указатели в других направлениях. Он будет выглядеть следующим образом: neighbors = {null, pointer, pointer, null, pointer, null, pointer, null) (порядок списка - Север, Восток, Юг, Запад, 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 [номер], вам нужно поместить этот указатель ко мне в список соседей". Я не уверен, как передать указатель на себя, хотя.
Есть предположения? Извините, это так запутанно...
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...
this
, а не&this
.