C++使用template時報“有多個過載函式 與引數列表匹配”錯誤
阿新 • • 發佈:2019-02-18
今天在做《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函式