我正在尝试对函数模板进行一些练习,如以下示例所示:
#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)
对不起,我是模板的新手。感谢您的帮助。
答案 0 :(得分:4)
您对模板的使用是正确的,但是编译器抱怨说已经有一个名为400,021+213.443
的函数,并且带有相同的参数。
它的全名是Pattern.matches("[0-9],?.?+[0-9],?.?+", theequation2)
,但是因为您写的是max
,std::max
编译器无法知道要调用哪个函数。
解决方案是不使用using namespace std
,请参阅Why is "using namespace std" considered bad practice?。
答案 1 :(得分:1)