簡體   English   中英

從基類轉換到子類時,dynamic_cast 失敗

[英]dynamic_cast is failing when casting from base to child class

我有一個結構

struct foo : public std::map<std::string, int>
{
};

和一個子結構;

struct bar : public foo
{
    int another_member;
}

但是我不能使用bar* b = dynamic_cast<bar*>(f)其中 f 是指向 foo 的指針。

即使我將foo重構為

struct foo
{
     std::map<std::string, int> m;
};

我仍然有問題。 我玩過我的 RTTI 設置無濟於事。 這到底是怎么回事?

錯誤是:

錯誤 C2683:“dynamic_cast”:“Credit::WaterfallSimulationResult”不是多態類型

dynamic_cast僅適用於多態類型,即具有虛函數表的structclass

最好的辦法是在你的基礎struct引入一個虛函數,而最好的引入函數是虛析構函數,這可以說是一件好事:

struct foo
{
     std::map<std::string, int> m;
     virtual ~foo(){};
};

請注意,這會強制您使用“重構”形式的foo :STL 容器並非設計為用作基類。

暫無
暫無

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

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