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(播放器)