ошибка перегрузки для шаблонной функции C ++ - PullRequest
0 голосов
/ 10 ноября 2018

Я пытаюсь поработать с шаблонами функций, как в следующем примере:

#include <iostream>
using namespace std;

template <class T>
T max(T a, T b)
{
    return a > b ? a : b;
}

int main()
{
    cout << "max(10, 15) = " << max(10, 15) << endl;

    retun 0;

}

Но я получил следующие ошибки.Кто-нибудь может распознать, где проблема?

..\src\main.cpp:59:40: error: call of overloaded 'max(int, int)' is   
ambiguous
cout << "max(10, 15) = " << max(10, 15) << endl;
                                    ^
..\src\main.cpp:16:3: note: candidate: 'T max(T, T) [with T = int]'
 T max(T a, T b)
^~~
In file included from c:\mingw\include\c++\8.1.0\bits\char_traits.h:39,
             from c:\mingw\include\c++\8.1.0\ios:40,
             from c:\mingw\include\c++\8.1.0\ostream:38,
             from c:\mingw\include\c++\8.1.0\iostream:39,
             from ..\src\main.cpp:9:
c:\mingw\include\c++\8.1.0\bits\stl_algobase.h:219:5: note:         
candidate: 'constexpr const _Tp& std::max(const _Tp&, const _Tp&) 
[with _Tp = int]'
max(const _Tp& __a, const _Tp& __b)

Извините, я новичок в шаблонах.Спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 10 ноября 2018

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

Это полное имя будет std::max, но поскольку вы написали using namespace std, это просто max, и компилятор не может знать, какую функцию вызывать.

Решение не использовать using, см. Почему «использование пространства имен std» считается плохой практикой? .

0 голосов
/ 10 ноября 2018

using namespace std; это проблема

Пожалуйста, прекратите использовать это, посмотрите, почему

Заголовок iostream включает еще один заголовочный файл, который извлекает std::max, сообщая об ошибке компилятора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...