C++ 共享ptr的动态强制转换

C++ 共享ptr的动态强制转换,c++,shared-ptr,C++,Shared Ptr,我制作了几个类的std::shared_ptr版本,如下所示: typedef std::shared_ptr<MediaItem> MediaItemPtr; typedef std::shared_ptr<ImageMediaItem> ImageMediaItemPtr; class MediaItem { //stuff here } class ImageMediaItem : public MediaItem { //more stuff he

我制作了几个类的std::shared_ptr版本,如下所示:

typedef std::shared_ptr<MediaItem> MediaItemPtr;
typedef std::shared_ptr<ImageMediaItem> ImageMediaItemPtr;

class MediaItem
{
   //stuff here
}

class ImageMediaItem : public MediaItem
{
   //more stuff here
}
typedef std::shared_ptr mediatemptr;
typedef std::shared_ptr ImageMediaItemPtr;
类MediaItem
{
//这里的东西
}
类ImageMediaItem:公共MediaItem
{
//这里有更多的东西
}
在内部,我将所有内容作为MediaItemPtr对象传递,但当我尝试转换为ImageMediaItemPtr时,我尝试的任何内容似乎都不起作用。例如:

ImageMediaItemPtr item = std::dynamic_pointer_cast<ImageMediaItemPtr>(theItem);
//theItem is MediaItemPtr
ImageMediaItemPtr item=std::动态指针投射(ITEEM);
//Iteem是MediaItemPtr
失败于

错误C2440:“正在初始化”:无法从转换 'std::tr1::shared_ptr'至'std::tr1::shared_ptr'


你有没有想过这个角色应该如何工作?我对shared\u ptr有点陌生,
dynamic\u pointer\u cast
的模板参数应该是指向类型。换句话说,它应该是
T
,而不是
shared\u ptr

在这种情况下,它应该是
dynamic\u pointer\u cast
而不是
dynamic\u pointer\u cast

尝试:

ImageMediaItemPtr item = std::dynamic_pointer_cast<ImageMediaItem>(theItem);
ImageMediaItemPtr item=std::动态指针投射(ITEEM);

我正在尝试您的解决方案,但它似乎不起作用。我在这里遗漏了什么?@arunmoezhi,正如错误消息所说,“运行时动态_cast的操作数必须具有多态类类型”,即您的类需要具有虚拟函数。