2017-03-09 99 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