簡體   English   中英

在C ++中從數組動態轉換

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM