我正在为 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/