背景:
class UserpickSearchViewBaseSetting
{
public:
UserpickSearchViewBaseSetting(){}
std::map<std::string, bool> checked_user_list_;
std::map<std::string, std::string> disbale_list_;
};
class TeamMemberSearchViewSetting:public UserpickSearchViewBaseSetting
{
public:
TeamMemberSearchViewSetting():UserpickSearchViewBaseSetting()
{
}
TeamMemberSearchViewSetting(std::string tid):UserpickSearchViewBaseSetting(),team_id_(tid)
{
};
std::string team_id_;
};
//cpp调用
settings_forbigsearch_ = std::shared_ptr<TeamMemberSearchViewSetting>(new TeamMemberSearchViewSetting("aa"));
std::shared_ptr<TeamMemberSearchViewSetting> settings = std::dynamic_pointer_cast<TeamMemberSearchViewSetting>(settings_forbigsearch_);
报错信息:
/usr/include/c++/4.9/bits/shared_ptr.h:455: error: cannot dynamic_cast ‘(& __r)->std::shared_ptr<UserpickSearchViewBaseSetting>::<anonymous>.std::__shared_ptr<_Tp, _Lp>::get<, (__gnu_cxx::_Lock_policy)2u>()’ (of type ‘class *’) to type ‘class *’ (source type is not polymorphic) if (_Tp* __p = dynamic_cast<_Tp*>(__r.get())) ^
原因:
如遇到上述错误
那就需要注意:
base class needs to have at least one virtual
member function (i.e. be a polymorphic type) in order to allow dynamic casts.
要执行dynamic_cast
,您要投射的类型必须是多态的。为此,它必须拥有或继承一些虚拟成员。确保基类
具有虚拟成员函数(至少是虚拟析构函数)。
解决方案:
class UserpickSearchViewBaseSetting
{
public:
UserpickSearchViewBaseSetting(){}
virtual ~UserpickSearchViewBaseSetting(){}
std::map<std::string, bool> checked_user_list_;
std::map<std::string, std::string> disbale_list_;
};