我有一个被node继承的基类(node2D),它又被CSprite2D继承了(我在开发游戏引擎)

我有一个指向我从NODE继承的对象的指针的向量。

在我的函数CNode* getNodeByName(QString name)中,我返回一个CNode,但是我做不到

CSprite2D* sprite = getNodeByName("hello")


为什么会这样?有什么解决方法?我已经尝试过返回CSprite2D了,它的工作就像一个魅力。
我已经尝试将函数声明为virtual CNode* getNodeByName(Qstring name)

PS:如果有问题,我正在使用Qt。而且,我是C ++的新手,所以我可能会监督一些事情。

最佳答案

如果CSprite2D继承了CNode(在您的问题中您说是节点),则可以执行以下操作:

CSprite2D* sprite = static_cast< CSprite2D* >(getNodeByName("hello"));


仅当您确定返回的对象是CSprite2D *时,否则它是未定义的行为。

您还可以使用dynamic_cast(请参见link中的示例),dynamic_cast将返回空指针,或者如果强制转换失败。

CSprite2D* sprite = dynamic_cast< CSprite2D* >(getNodeByName("hello"));

07-24 09:19