C++ 从基类到派生类的动态强制转换,以便访问方法
我可以访问一个基类C++ 从基类到派生类的动态强制转换,以便访问方法,c++,polymorphism,c++14,dynamic-cast,C++,Polymorphism,C++14,Dynamic Cast,我可以访问一个基类PlayerBase,我从中派生了类Player。还有另一个类,GameEventHandler,它负责实际将“资源”委派给每个玩家,方法是GameEventHandler::ModifyResource: bool GameEventHandler::modifyResource(std::shared_ptr<Course::PlayerBase> player, Course::Bas
PlayerBase
,我从中派生了类Player
。还有另一个类,GameEventHandler
,它负责实际将“资源”委派给每个玩家,方法是GameEventHandler::ModifyResource
:
bool GameEventHandler::modifyResource(std::shared_ptr<Course::PlayerBase> player,
Course::BasicResource resource,
int amount)
{
}
但这会导致错误std::shared_ptr
不是指针的引用。将此更改为
std::shared_ptr<Player> ownPlayerPtr
= dynamic_cast<std::shared_ptr<Player>&>(player);
std::共享
=动态施法(玩家);
给出错误消息“std::shared_ptr”不是多态=动态_cast(播放器)代码>
关于为什么会发生这种情况,以及我需要做些什么来解决这个问题,有什么想法吗?可能是重复的
尝试使用动态\u指针\u强制转换:
std::shared_ptr<Course::Player> p = std::dynamic_pointer_cast<Course::Player>(player);
std::shared\u ptr p=std::dynamic\u pointer\u cast(播放器);
的可能重复项
尝试使用动态\u指针\u强制转换:
std::shared_ptr<Course::Player> p = std::dynamic_pointer_cast<Course::Player>(player);
std::shared\u ptr p=std::dynamic\u pointer\u cast(播放器);
您可以改为使用共享指针的动态强制转换。
如果共享指针不为空,并且这样的强制转换不会返回空指针,则返回的对象将共享共享指针资源的所有权,使用计数增加1。
否则,返回的对象是空的共享\u ptr。
即
std::shared\u ptr ownPlayerPtr=std::dynamic\u pointer\u cast(播放器)。您可以改为使用共享指针的dynamic cast。
如果共享指针不为空,并且这样的强制转换不会返回空指针,则返回的对象将共享共享指针资源的所有权,使用计数增加1。
否则,返回的对象是空的共享\u ptr。
即
std::shared_ptr ownPlayerPtr=std::dynamic_pointer_cast(播放器)