2015-07-20 77 views
1

有人可以幫助我瞭解爲什麼這些2個函數調用是一把雙刃劍:曖昧重載函數參考

int    greater(int i, int j)   { return (i > j ? i : j); } 
double   greater(double x, double y)  { return (x > y ? x : y); } 

int main(){ 
int   i = 10,   j = 5; 
double  x = 7.7,  y = 14.5; 
cout << greater(i, j); 
cout << greater(x, y); 
} 

從G ++確切的錯誤是:

reference to ‘greater’ is ambiguous cout << greater(i, j); 

這是波爾教授的優秀圖書上C++程序員。我正在編譯g ++(GCC)4.9.2。 謝謝你, Mainecat

回答

8

隨着您的使用情況,這兩個功能是不曖昧

你得到一個錯誤,因爲這(假設)線:

using namespace std; 

這條線讓你的功能不明確,因爲std::greater現在是一個候選人。

Avoid using namespace std;

+0

歡迎來到堆棧溢出,順便說一下。 –

+0

謝謝,我學到了很多東西。 – LACat