C ++模板函数的重载错误

时间:2018-11-10 18:14:34

标签: c++ eclipse templates

我正在尝试对函数模板进行一些练习,如以下示例所示:

#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 :(得分:4)

您对模板的使用是正确的,但是编译器抱怨说已经有一个名为400,021+213.443的函数,并且带有相同的参数。

它的全名是Pattern.matches("[0-9],?.?+[0-9],?.?+", theequation2),但是因为您写的是maxstd::max编译器无法知道要调用哪个函数。

解决方案是不使用using namespace std,请参阅Why is "using namespace std" considered bad practice?

答案 1 :(得分:1)

using namespace std;是问题

请停止使用see why

iostream标头包含另一个提取std::max的标头文件,从而导致编译器错误。