我是 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
会导致问题,但我收到错误:
No Suitable Conversion Function from
LoadTask::MasterFilePtr
toMasterFile *
exists
我认为 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/