более одного экземпляра шаблона функции соответствует списку аргументов - PullRequest
1 голос
/ 12 января 2020
#include <iostream>
using std::cout;
using std::endl;

#include <string>
using std::string;

template <class T>
T max(T const& t1, T const& t2) {
    return t1 < t2 ? t2 : t1;
}

int main() {
    cout << max(1, 2) << endl;
    cout << max<double>(1.2, 2) << endl;
    string s1 = "hello";
    string s2 = "world";
 -->   cout << max(s1, s1) << endl;
}

В строке со стрелкой он жалуется: «более одного экземпляра шаблона функции« max »соответствует списку аргументов: - шаблон функции» const _Tp & std :: __ 1 :: max (const _Tp & __ a , const _Tp & __ b) "- шаблон функции" T max (const T & t1, const T & t2) "- типы аргументов: (std :: __ 1 :: string, std :: __ 1 :: string)"

Я в замешательстве, так как они оба строковые, и не уверен, с чем еще может соответствовать шаблон.

1 Ответ

1 голос
/ 12 января 2020

Функция max находится в конфликте с функцией std::max, обнаруженной через ADL. Чтобы это исправить, вы можете заменить вызов квалифицированным поиском:

cout << ::max(s1, s1) << endl;

Вы также можете заключить имя функции в круглые скобки, чтобы отключить ADL:

cout << (max)(s1, s1) << endl;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...