Могу ли я передать указатель на себя в функции?

0

У меня есть объект (тип 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 [номер], вам нужно поместить этот указатель ко мне в список соседей". Я не уверен, как передать указатель на себя, хотя.

Есть предположения? Извините, это так запутанно...

  • 5
    Конечно. Но именно this , а не &this .
  • 0
    Слишком много объяснений для такого простого вопроса! Ударьте гвоздь с минимальным образцом.
Показать ещё 1 комментарий
Теги:
pointers
this

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...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню