У меня есть объект 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;
}
Сначала разыщите его дважды. Обратите внимание, что * связывается менее плотно, чем .
или ->
, поэтому вам нужны парнеры:
(**s).setMarked();
Или,
(*s)->setMarked();
В исходном коде компилятор видел эквивалент
**(s.setMarked());
поэтому он не работал.
q.push(**s);
подтолкнет копию узла; Ваша последующая пометка**s
не повлияет на очередь