[英]dynamic cast from array in c++
我有一個STSequencer
類,它擴展了ofxDTanbileBase
。 我有一個方法,它根據我給定的className返回vector<ofxDTanbileBase>
。 我想回STSequencer
但出現以下錯誤:
'ofxDTangibleBase *'不是一個類
從右值到引用類型'STSequencer&'的Dynamic_cast
這就是我嘗試atm的方式:
vector<ofxDTangibleBase> sequencers = gTangibleList->findTangibleByClassName("STSequencer");
for (int i = 0; i < sequencers.size(); i++) {
STSequencer &sequencer = dynamic_cast<STSequencer&>(&sequencers[i]);
}
這是方法:
vector<ofxDTangibleBase> ofxDGlobalTangibleList::findTangibleByClassName(const char *className) {
vector<ofxDTangibleBase> returnVector;
for (int i = 0; i < _tangibles.size(); i++) {
ofxDTangibleBase &t = _tangibles[i];
if (t.className == className) {
returnVector.push_back(t);
}
}
return returnVector;
}
也歡迎一種更好的方法。
STSequencer &sequencer = dynamic_cast<STSequencer&>
應該
STSequencer *sequencer = dynamic_cast<STSequencer*>
否則,請刪除sequencers[i]
前面的&
。 通過獲取sequencers[i]
的地址,您將獲得一個指針。 但是您然后嘗試將dynamic_cast轉換為參考,這沒有意義。
如果您的設計還有其他風險。 您可能會在不期望的時候最終復制(切片)元素。 我不確定你在做什么。 對於此答案,我只是查看了無法編譯的行。
您的向量實際上並不包含STSequencer
對象,因此即使修復了間接(引用與指針)問題的級別, STSequencer
也將導致未定義的行為。
如果確實需要多態性,則需要將地址存儲在向量中,而不是對象中,因為向量對它的元素大小進行了假設。
嘗試std::vector<std::unique_ptr<ofxDTanbileBase>>
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.