没有使用两种类型的字符串进行匹配的函数调用

no matching function call with two types of strings

本文关键字:函数调用 字符串 两种 类型      更新时间:2023-10-16

我的驱动程序正在调用一个带有remove函数的find函数,如下所示:

remove(find(p, string("Hog")));

我的查找功能是:

Node <T> * find(Node <T> * & pHead, T & e)

我的删除功能是:

Node <T> * remove(const Node <T> * pRemove)

错误是说:之间没有匹配的函数调用

find(Node>*&,std::__cxx11::string((驱动程序调用的内容(

find(节点*&,T&([带有T=std::__cxx11::basic_string](我的find函数正在使用(

我能看到的唯一区别是驱动程序使用的字符串数据:std::__cxx11::string而我的只有CCD_ 2。

我不知道这两者之间的区别是什么。有什么想法可以让这个函数调用匹配吗?

您不能将临时对象绑定到引用,因为通常临时对象会立即死亡,而对它的引用会挂起。在通话中,它一直存活到我回来。您可以通过将功能更改为:来解决问题

Node <T> * find(Node <T> * & pHead, const T & e)
^^^^^

const &延长了临时的使用寿命,直到函数返回。

另一种解决方案是不使用临时的:

string s("Hog")
remove(find(p, s));