1. 程式人生 > >C++使用template時報“有多個過載函式 與引數列表匹配”錯誤

C++使用template時報“有多個過載函式 與引數列表匹配”錯誤

今天在做《Essential C++》裡面的練習題的時遇到的這個問題。

先看程式碼,是一段很簡單的程式碼:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

template <typename T>
inline T max(T x, T y)
{
	return x > y ?x:y;
}
template <typename T>
inline T max(vector<T> &x)
{
	return *max_element(x.begin(), x.end());
}

int main()
{
	cout<<max(1,2)<<endl;
	return 0;
}

vs上報告“有多個過載函式 max  與引數列表匹配”。這個錯誤覺得有點無辜……

然後定位了一下max函式,看了看過載的函式



原來如此……忘了系統也提供max函數了……所以平時做練習函式名稱之類的也要注意啊……

解決辦法:

     (1)改自定義的函式名稱

     (2)不使用using namespace std;

     (3)將呼叫改為:    

             cout<<::max(1,2)<<endl;//表示呼叫,本檔案中的max函式