Как вызвать функцию-член объекта, используя указатель этого объекта?

0

У меня есть объект Node, который имеет открытую функцию-член. Когда у меня есть указатель (или двойной указатель) в этом случае, указывающий на исходный объект, как мне вызвать функцию-член?

Вот функция-член в классе Node:

class Node {
public:
    ...
    int setMarked();
    ...
private:
    ...
    int marked;
    ...
};

И здесь я пытаюсь назвать эту функцию:

Node **s;
s = &startNode; //startNode is the original pointer to the Node I want to "mark"
q.push(**s); //this is a little unrelated, but showing that it does work to push the original object onto the queue.
**s.setMarked(); //This is where I am getting the error and where most of the question lies.

И на всякий случай это имеет значение, функция.setMarked() выглядит так:

int Node::setMarked() {
    marked = 1;
    return marked;
}
  • 0
    обратите внимание, что q.push(**s); подтолкнет копию узла; Ваша последующая пометка **s не повлияет на очередь
Теги:
pointers
member-functions
double-pointer

1 ответ

3
Лучший ответ

Сначала разыщите его дважды. Обратите внимание, что * связывается менее плотно, чем . или ->, поэтому вам нужны парнеры:

(**s).setMarked();

Или,

(*s)->setMarked();

В исходном коде компилятор видел эквивалент

**(s.setMarked());

поэтому он не работал.

  • 0
    Это решает исходную проблему под рукой, но по какой-то причине теперь толчок не работает. Есть ли способ, которым это изменение повлияет на это?
  • 1
    Почему вы изменили толчок? Это влияет только на вызов функции-члена.
Показать ещё 4 комментария

Ещё вопросы

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