我正在为 C++ 构建一个 GUI 类并处理很多指针。一个示例调用:

mainGui.activeWindow->activeWidget->init();

我的问题是我想将 activeWidget 指针转换为另一种类型。 activeWidget 是 GUI_BASE 类型。派生自 BASE 我还有其他类,例如 GUI_BUTTON 和 GUI_TEXTBOX。我想将 activeWidget 指针从 GUI_BASE 转换为 GUI_TEXTBOX。我认为它看起来像这样:
(GUI_TEXTBOX*)(mainGui.activeWindow->activeWidget)->function();

这不起作用,因为编译器仍然认为指针是 GUI_BASE 类型。但是,以下代码确实有效:
GUI_TEXTBOX *textbox_pointer;
textbox_pointer = (GUI_TEXTBOX*)mainGui.activeWindow->activeWidget;
textbox_pointer->function();

我希望我的问题只是语法问题。谢谢您的帮助 :)

最佳答案

问题是强制转换的优先级低于 . -> () [] 运算符。您必须使用 C++ 样式转换或添加额外的括号:

((GUI_TEXTBOX*)mainGui.activeWindow->activeWidget)->function();  // Extra parentheses
dynamic_cast<GUI_TEXTBOX*>(mainGui.activeWindow->activeWidget)->function();  // C++ style cast

关于c++ - 这个指针转换我做错了什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/331937/

10-11 23:02