所以我有这段代码:
Node* SceneGraph::getFirstNodeWithGroupID(const int groupID)
{
return static_cast<Node*>(mTree->getNode(groupID));
}
mTree-&gt; getNode(groupID)返回PCSNode *。节点是从PCSNode公开派生的。
我在static_cast上找到的所有文档都说明了这一点:“static_cast运算符可以用于操作,例如将指向基类的指针转换为指向派生类的指针。”
然而,XCode(GCC)编译器说static_cast从PCSNode *到Node *是无效的,不允许。
这是为什么?当我将其切换为C风格的演员表时,没有来自编译器的抱怨。
感谢。
更新:即使问题已得到解答,我也会发布编译错误以确保完整性,以防其他人遇到同样的问题:
错误:语义问题:Static_cast 从'PCSNode *'到'Node *'不是 允许
答案 0 :(得分:23)
原因很可能是Node
的定义对编译器不可见(例如,它可能只是前向声明的: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
}