нет совпадения вызова функции с двумя типами строк - PullRequest
3 голосов
/ 27 октября 2019

мой драйвер вызывает функцию поиска с функцией удаления, например:

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

моя функция поиска:

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

, а моя функция удаления:

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

ошибка говорит об отсутствии соответствующего вызова функции между:

find (Узел> * &, std :: __ cxx11 :: string) (что вызывает драйвер)

и

find (Node * &, T &) [с T = std :: __ cxx11 :: basic_string] (что использует моя функция поиска)

единственное отличие, которое я вижу, это строковые данные, которые использует драйвер: std::__cxx11::string, а у меня просто std::__cxx11::basic_string<char>.

Я не знаю, в чем разница между этими двумя,какие-нибудь мысли о том, как получить соответствие этой функции вызова?

1 Ответ

4 голосов
/ 27 октября 2019

Вы не можете привязать временное к ссылке, потому что обычно временное умирает немедленно, и ссылка на него свисает. В вызове это выживает до возвращения, хотя. Вы можете решить проблему, изменив функцию на:

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

const & продлевает срок службы временного до возврата функции.

Альтернативным решением было бы не использоватьвременный:

string s("Hog")
remove(find(p, s));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...