gpt4 book ai didi

c++ - 为什么从指向基的指针到指向派生的指针的 static_cast 是 "invalid?"

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:03:10 25 4
gpt4 key购买 nike

所以我有这段代码:

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 风格的转换时,编译器没有任何提示。

谢谢。

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

error: Semantic Issue: Static_cast from 'PCSNode *' to 'Node *' is not allowed

最佳答案

原因很可能是 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
}

关于c++ - 为什么从指向基的指针到指向派生的指针的 static_cast 是 "invalid?",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5808758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com