C++ 从基类转换到子类时,动态_转换失败
我有一个结构C++ 从基类转换到子类时,动态_转换失败,c++,dynamic-cast,C++,Dynamic Cast,我有一个结构 struct foo : public std::map<std::string, int> { }; 但是我不能使用bar*b=dynamic\u cast(f)其中f是指向foo的指针 即使我将foo重构为 struct foo { std::map<std::string, int> m; }; structfoo { std::map m; }; 我仍然有这个问题。我一直在玩弄我的RTTI设置,但毫无用处。到底发生了什么事 错误是:
struct foo : public std::map<std::string, int>
{
};
但是我不能使用bar*b=dynamic\u cast(f)
其中f是指向foo的指针
即使我将foo
重构为
struct foo
{
std::map<std::string, int> m;
};
structfoo
{
std::map m;
};
我仍然有这个问题。我一直在玩弄我的RTTI设置,但毫无用处。到底发生了什么事
错误是:
错误C2683:'dynamic_cast':'Credit::waterwallsimulationresult'为
不是多态类型
dynamic\u cast
仅适用于多态类型,即具有虚拟函数表的struct
s或class
es
最好的方法是在基本结构中引入一个虚拟函数,最好的方法是引入虚拟析构函数,这可以说是一件好事:
struct foo
{
std::map<std::string, int> m;
virtual ~foo(){};
};
structfoo
{
std::map m;
虚拟~foo(){};
};
请注意,这会迫使您使用“重构”形式的
foo
:STL容器不是设计用来作为基类的。是否foo
有任何虚拟成员?我从不理解错误。@SlodgeMonster它是如何阻止您将它们插入问题的?@SlodgeMonster:你在开玩笑吧?因为你不理解错误并不意味着它对试图帮助你的人没有帮助<代码>结构foo:public std::map
这可能是个好主意。请参阅std::map析构函数的声明
struct foo
{
std::map<std::string, int> m;
virtual ~foo(){};
};