【发布时间】:2020-01-30 16:51:18
【问题描述】:
我正在创建一个程序,该程序创建两个对象并通过一个包含许多选项的大菜单向下传递它们。我一直用来将它们作为参数传递的解决方案是创建一个指向对象指针的指针。但是,我遇到了一个问题,如果我使用指向对象的指针作为参数,则会出现编译器错误。显然这里有一个我没有想到的 c++ 约定。
void runMainMenu(Point** ptrPtrPoint)
{
.
.
*ptrPtrPoint->displayCoord();
.
}
据我所知,这个操作应该是可能的,但这会立即被认为是一个错误“表达式必须具有指向类的类型(当间接运算符与指向指向类的指针)。传递指向对象指针的指针并访问成员函数的正确格式是什么?
【问题讨论】:
-
尝试使用
(*ptrPtrPoint)->displayCoord();。只是猜测。 -
这不是“C++ 约定”。这是表达式中运算符优先级的规则,并且您(错误地)假设指向指针的指针和指向对象的指针是等价的。
*ptrPtrPoint->displayCoord()等价于*(ptrPtrPoint->displayCoord())并且表达式ptrPtrPoint->displayCoord()没有意义,因为ptrPtrPoint指向指针,而不是Point.. 你需要的是(*ptrPtrPoint)->displayCoord()。\ -
只要用
void runMainMenu(Point* &refPtrPoint) { refPtrPoint->displayCoord(); }就不用担心refPtrPoint是否为空.. -
@Brandon "那么您不必担心
refPtrPoint是否为空' - 是的,您可以。引用本身不能为空,但它所引用的指针仍然可以为空