【发布时间】:2011-04-27 18:27:48
【问题描述】:
所以我有这个代码:
Node* SceneGraph::getFirstNodeWithGroupID(const int groupID)
{
return static_cast<Node*>(mTree->getNode(groupID));
}
mTree->getNode(groupID) 返回一个 PCSNode*。 Node 是从 PCSNode 公开派生的。
我在 static_cast 上找到的所有文档都说明了这一点:“static_cast 运算符可用于将指向基类的指针转换为指向派生类的指针等操作。”
然而,XCode 的 (GCC) 编译器表示从 PCSNode* 到 Node* 的 static_cast 无效且不允许。
有什么原因吗?当我将它切换到 C 风格的演员表时,编译器没有抱怨。
谢谢。
更新:即使问题已得到解答,我仍会发布编译器错误以确保完整性,以防其他人遇到同样的问题:
错误:语义问题:Static_cast 从 'PCSNode *' 到 'Node *' 不是 允许
【问题讨论】:
-
你能说出确切的编译器错误吗?只是为了确保那里没有任何与 const 相关或类似的东西。 (根据您描述的信息应该可以)
-
"Node 是从 PCSNode 公开派生的"???我猜你的意思是“
PCSNode是从Node公开派生的”,这与“Node是PCSNode的基类”相同。对吗? -
PCSNode 实际上是基类,因为它包含树的指针,Node 是一个可以在树中的转换节点。