c++ - 不存在从 LoadTask::MasterFilePtr 到 MasterFile * 的合适转换函数

标签 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 会导致问题,但我收到错误:

No Suitable Conversion Function from LoadTask::MasterFilePtr to MasterFile * exists

我认为 typedefMasterFilePtr 设置为等同于 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/

相关文章:

c++ - 为什么 tolower 不将我的大写字符转换为小写字符?

c - C 中的哈希结构

C++:如何解决这个递归难题(子集和式)

c++ - 在 C++ 中存储对数组的引用

从堆栈中检索项目时 C 程序崩溃

scala 的类型检查器无法识别抽象路径相关类场景中的类型

types - 在 go 中,当 *Type 调用方法时如何创建接口(interface)?

java - Java中的继承和多态

c++ - 正则表达式括号表达式中的反斜杠

c++ - Jetson TX2、Arduino Uno 串口通信