6

所以我有这个代码:

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 风格的演员表时,编译器没有抱怨。

谢谢。

更新:即使问题已得到解答,我仍会发布编译器错误以确保完整性,以防其他人遇到同样的问题:

错误:语义问题:不允许从“PCSNode *”到“Node *”的静态转换

4

1 回答 1

25

原因很可能Node是编译器看不到 of 的定义(例如,它可能只是前向声明的: class Node;)。

自包含示例:

class Base {};

class Derived; // forward declaration

Base b;

Derived * foo() {
    return static_cast<Derived*>( &b ); // error: invalid cast
}

class Derived : public Base {}; // full definition

Derived * foo2() {
    return static_cast<Derived*>( &b ); // ok
}
于 2011-04-27T18:37:42.273 回答