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

LoadTask.h中,输入定义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  );


但是,这感觉非常错误,因此有人可以解释这里发生了什么吗?

最佳答案

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

关于c++ - 不存在从LoadTask::MasterFilePtr到MasterFile的合适转换函数*,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41765874/

10-12 06:22