C ++ Передача указателя на указатель на объект, не может получить доступ к членам - PullRequest
1 голос
/ 30 января 2020

Я создаю программу, которая создает два объекта и передает их через большое меню с большим количеством опций. Решение, которое я использовал для передачи их в качестве аргументов, заключалось в создании указателя на указатель на объекты. Тем не менее, я сталкиваюсь с проблемой, когда, если я использую указатель на указатель на объект в качестве параметра, я получаю ошибку компилятора. Ясно, что здесь есть соглашение на С ++, о котором я не думаю.

void runMainMenu(Point** ptrPtrPoint)
{
.
.
    *ptrPtrPoint->displayCoord();
.
}

Насколько я могу судить, эта операция должна быть возможной, но она сразу же воспринимается как ошибка "выражение должно иметь указатель- тип to-class (который должен использоваться при использовании оператора косвенности с указателем на указатель на класс). Каков правильный формат для передачи указателя на указатель на объект и доступа к функциям-членам?

Ответы [ 2 ]

6 голосов
/ 30 января 2020

Вы стали жертвой оператора приоритета .

Сначала разыменовывается, чтобы получить Point*, затем используйте ->

(*ptrPtrPoint)->displayCoord();

Компилятор читает исходный код как

*(ptrPtrPoint->displayCoord()); 
0 голосов
/ 31 января 2020

Проблема в том, что оператор имеет приоритет .

Сначала необходимо разыменовать указатель на указатель, а затем вызвать функцию с помощью ->. Правая строка кода такова:

(*ptrPtrPoint)->displayCoord();

обратите внимание на приоритет оператора, потому что в этом случае компилятор выдаст вам ошибку, но это не всегда так. Иногда эти ошибки могут привести к неопределенному поведению или непредвиденному поведению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...