我是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::MasterFilePtr
到MasterFile *
的转换函数不存在我以为
typedef
会将MasterFilePtr
设置为与MasterFile *
等效,但是事实并非如此。此外,我可以通过尝试克服错误:
dataLoader.SetMasterFile( &*masterFile );
但是,这感觉非常错误,因此有人可以解释这里发生了什么吗?
最佳答案
LoadTask::MasterFilePtr
是std::shared_ptr<MasterFile>
的别名。您不能将shared_ptr
传递给需要原始指针的函数-没有定义隐式转换。为了从shared_ptr
中提取原始指针,您需要使用get()
方法或使用发现的技巧。
关于c++ - 不存在从LoadTask::MasterFilePtr到MasterFile的合适转换函数*,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41765874/