Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从基类转换到子类时,动态_转换失败_C++_Dynamic Cast - Fatal编程技术网

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(){};
};