我是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::MasterFilePtr
到MasterFile *
没有合适的转换功能
我认为typedef
设置MasterFilePtr
等同于MasterFile *
,但似乎并非如此。
此外,我通过尝试来解决错误:
dataLoader.SetMasterFile( &*masterFile );
虽然这感觉非常错误,所以有人可以解释这里发生了什么吗?
答案 0 :(得分:1)
LoadTask::MasterFilePtr
是std::shared_ptr<MasterFile>
的别名。您不能将shared_ptr
传递给期望原始指针的函数 - 没有定义隐式转换。要从shared_ptr
中提取原始指针,您需要使用get()
方法或使用您发现的技巧。