簡體   English   中英

轉換std:vector <reference_wrapper<Base> &gt;到std:vector <reference_wrapper<Derived> &gt;運行時錯誤時間:0存儲器:3412信號:6

[英]Transform std:vector<reference_wrapper<Base>> to std:vector<reference_wrapper<Derived>> Runtime error time: 0 memory: 3412 signal:6

我正在嘗試將對基礎對象的引用向量轉換為對派生對象的引用向量。 一切都編譯良好,但我收到此錯誤:運行時錯誤時間:0內存:3412 signal:6

這是我的代碼:

#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>

using namespace std;

struct B {
    B(int i) { b = i; }
    virtual ~B() {}
    int b;
};

struct D: public B {
    D(int i): B(i) {}
};

typedef vector<reference_wrapper<B>> refB;
typedef vector<reference_wrapper<D>> refD;

void dynamicCast(refB &b, refD &d)
{
    for(const auto& bb: b)
    {
        d.push_back(dynamic_cast<D&> (bb.get()));
    }
}

int main() {
    vector<B*> numbers;
    refB refNumbers;
    refD dNumbers;

    for(int i = 0; i < 10; i++)
    {
        numbers.push_back(new B(2*i));
        refNumbers.push_back(*numbers[i]);
    }

    dynamicCast(refNumbers, dNumbers);

    return 0;
}

dynamicCast()函數怎么了?

編輯:@John Zwinck答案有所幫助,但是當我嘗試在我的代碼中執行此操作時,出現編譯錯誤:

無法將'(&obj)-> std :: reference_wrapper <_Tp> :: get()'(類型為'MEPObject'類型)'動態轉換為'類MEPGene&'(目標不是指針或對完整類型的引用)基因。 (dynamic_cast(obj.get()));

class MEPObject;
class MEPGene;
typedef std::vector<std::reference_wrapper<MEPObject>> MEPObjects;
typedef std::vector<std::reference_wrapper<MEPGene>> MEPGenes;

void dynamicCast(MEPObjects &objects, MEPGenes &genes)
{
    for(const auto &obj: objects)
    {
        genes.push_back(dynamic_cast<MEPGene&> (obj.get()));
    }
}
                                                      ^

dynamicCast() 問題在這里:

    numbers.push_back(new B(2*i));

您只能構造作為基類的B實例。 您不可能將它們D為派生類D

也許您打算構造派生實例並將其存儲在對base的引用向量中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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