2017-03-09 120 views
0

我有得到由node2D继承了基类(node),用于获取由CSprite2D继承(我正在游戏引擎)返回指针到继承的类C++

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

在我的功能CNode* getNodeByName(QString name)我返回CNode,但我不能做

CSprite2D* sprite = getNodeByName("hello") 

这是为什么,什么可能是一个解决方法吗?我已经尝试过它返回一个CSprite2D,它的工作就像一个魅力。 我已经试图宣布我的功能为virtual CNode* getNodeByName(Qstring name)

PS:我使用Qt,如果有关系。而且,我是C++的新手,所以我可以监督一些事情。

+0

你可以投你CNode *至* CSprite2D如果您确定它的类型是CSpirite2D的*参见http://www.cplusplus.com/doc/tutorial/typecasting/有关转换和不同类型的更多信息演员。 – basslo

+0

'CNode'和'CSprite2D'之间的关系是什么? – Peter

+0

CSprite2D由CNode2D继承,CNode2D继承自CNode。 @Peter – ThefrenchSpeedruns

回答

1

如果CSprite2D继承CNode(在你的问题你说的结点),你可以做到以下几点:

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

只有当你确信返回的对象是一个CSprite2D *,否则未定义行为

您也可以使用dynamic_cast(请参阅link中的示例),dynamic_cast将返回空指针或者转换失败。

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

确定, 谢谢 ;) – ThefrenchSpeedruns