没有从LoadTask :: MasterFilePtr到MasterFile *的合适转换函数

时间:2017-01-20 14:25:32

标签: c++ pointers types

我是C ++的新手,在理解某些转换行为方面遇到了一些麻烦。

LoadTask.h我输入define MasterFilePtr

typedef std::shared_ptr<MasterFile> MasterFilePtr; 

然后我初始化masterFile变量:

MasterFilePtr masterFile;

稍后,在LoadTask.cpp中,我将masterFile作为参数传递给函数:

dataLoader.SetMasterFile( masterFile  );

其中函数定义为:

void SetMasterFile( MasterFile * pMasterFile ) { m_pMasterFile = pMasterFile; };

传入masterFile会导致问题,但收到错误:

  

LoadTask::MasterFilePtrMasterFile *没有合适的转换功能

我认为typedef设置MasterFilePtr等同于MasterFile *,但似乎并非如此。

此外,我通过尝试来解决错误:

dataLoader.SetMasterFile( &*masterFile  );

虽然这感觉非常错误,所以有人可以解释这里发生了什么吗?

1 个答案:

答案 0 :(得分:1)

LoadTask::MasterFilePtrstd::shared_ptr<MasterFile>的别名。您不能将shared_ptr传递给期望原始指针的函数 - 没有定义隐式转换。要从shared_ptr中提取原始指针,您需要使用get()方法或使用您发现的技巧。