2015-02-09 30 views
5

我有這樣的代碼:什麼是「不能通過返回類型單獨區分重載函數」是什麼意思?

在標題:

... 
int32_t round(float v); 
... 

,並在源

... 
int32_t round(float v) 
{ 
    int32_t t = (int32_t)std::floor(v); 
    if((v - t) > 0.5) 
     return t + 1; 

    return t; 
} 
... 

我看了在這裏對這個網站,但例子似乎有點太複雜了對我來說。

我正在學習C++,所以如果有人能向我解釋錯誤的含義和原因,我將不勝感激。

+4

這意味着已經有一個'round'參加'float'參數。 – 2015-02-09 22:46:15

+1

而編譯器可能會向你展示* other *'round'函數。 – 2015-02-09 22:46:53

+7

我假設你使用'命名空間標準;'。這會使'int32_t round(float)'與['std :: round'](http://en.cppreference.com/w/cpp/numeric/math/round)發生衝突。 – 2015-02-09 22:47:28

回答

13

Function overloading表示具有多個具有相同名稱的方法。

現在,編譯器要解析正確的重載方法,會查看方法名稱和參數,但返回值爲NO。這意味着如果你有

int round(float something) { ... } 
float round(float something) { ... } 

然後,編譯器無法區分它們,並知道你想在調用點調用哪一個。所以在你的情況下,這意味着已經有另一個round方法,它接受float

+0

這個解釋爲我解決了一切。關於解決這個問題,我在原來的帖子上添加了一條評論。謝謝 – user3084450 2015-02-09 22:58:09

相關問題