通过指针/引用传递TStringList至函数时出现调用匹配错误
问题解决:No matching function call 错误分析与修复
错误原因
你调用ParseOMT时传递的第二个参数类型不匹配:
- 调用代码里
metaData是std::unique_ptr<TStringList>,&metaData得到的是指向智能指针的指针(std::unique_ptr<TStringList>*) - 但
ParseOMT函数的第二个参数要求的是TStringList*(原始指针)
两种类型完全不兼容,因此编译器报"No matching function call"。
修复方案
方案1:传递智能指针管理的原始指针(推荐)
利用std::unique_ptr的get()方法,获取它所管理的原始TStringList*指针,直接传递给函数:
_retVal = ParseOMT(inpBuf, metaData.get(), _reportIt);
这样函数内部可以通过该指针修改TStringList的内容,原函数中的metaData依然持有对象所有权,不会出现内存泄漏。
额外说明
你函数声明和定义中的第二个参数名不一致(_currMetadata vs _metadata),这在C++中是允许的,参数名不影响函数匹配,不是导致错误的原因。
内容的提问来源于stack exchange,提问作者JKofsky
相关产品推荐
相关产品推荐

