[英]Why is a static_cast from a Pointer to Base to a Pointer to Derived “invalid?”
So I have this code:所以我有这个代码:
Node* SceneGraph::getFirstNodeWithGroupID(const int groupID)
{
return static_cast<Node*>(mTree->getNode(groupID));
}
mTree->getNode(groupID) returns a PCSNode*. mTree->getNode(groupID) 返回一个 PCSNode*。 Node is publicly derived from PCSNode.
Node 是从 PCSNode 公开派生的。
All of the docs I've found on static_cast say something to this effect: "The static_cast operator can be used for operations such as converting a pointer to a base class to a pointer to a derived class."我在 static_cast 上找到的所有文档都说明了这一点:“static_cast 运算符可用于诸如将指向基本 class 的指针转换为指向派生 class 的指针等操作。”
Yet, XCode's (GCC) compiler says that the static_cast is from PCSNode* to Node* is invalid and not allowed.然而,XCode 的 (GCC) 编译器表示从 PCSNode* 到 Node* 的 static_cast 无效且不允许。
Any reason why this is?这是什么原因? When I switch it to a C-style cast, there are no complaints from the compiler.
当我将它切换到 C 风格的演员表时,编译器没有抱怨。
Thanks.谢谢。
UPDATE: Even though the question was answered, I'll post the compiler error for completeness in case anyone else has the same problem:更新:即使问题已得到解答,我仍会发布编译器错误以确保完整性,以防其他人遇到同样的问题:
error: Semantic Issue: Static_cast from 'PCSNode *' to 'Node *' is not allowed
错误:语义问题:不允许从“PCSNode *”到“Node *”的静态转换
The reason is most likely that the definition of Node
is not visible to the compiler (eg, it may have been only forward-declared: class Node;
).原因很可能是
Node
的定义对编译器不可见(例如,它可能只是前向声明的: class Node;
)。
Self-contained example:自包含示例:
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
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.