2011-09-22 19 views
0

這種嘗試定義重載三種大小整數的函數失敗。爲什麼?爲什麼這個函數重載三個整型無法編譯?

byte hack(byte x) 
{ 
    return x+1; 
} 

unsigned short hack(unsigned short x) 
{ 
    return x+2; 
} 

unsigned int hack(unsigned int x) 
{ 
    return x+3; 
} 

編譯器告訴我: zzz.cpp:98:錯誤:88:錯誤:的 '無符號整型劈(無符號整型)' zzz.cpp重新定義 '字節劈(字節)' 先前定義這裏

+4

既然'byte'不是標準類型,也許你可以查找它的定義並在這裏提供它? –

回答

9

你的編譯器/編碼認爲字節unsigned int類型是同樣的事情...通過它們的參數計算和/或類型,而不是返回類型

+0

+1因爲是的,這就是我的編譯器(gcc)認爲的。爲什麼?因爲我桌子上的某個人愚蠢地寫下了「typedef unsigned int byte;」正如我剛剛在一分鐘前發現追趕另一個錯誤。 – DarenW

+2

@DarenW:可能應該直接使用'std :: uin8_t'。或者,如果你不是指八位字節,則爲'char'。 – GManNickG

0

重載函數只能是不同的。所以,這是三種不同的功能。

+1

最後我檢查了,如果函數的參數類型不同,函數可能會因返回類型而有所不同。這是有點模板功能的工作。 :P無論如何,三者都是不同的功能;事實上它們具有相同的名稱對編譯器沒有任何意義,因爲無論如何,C++都會將名稱變成類似hack_ii_i的名稱。這個名字只是爲了人類的方便。 – cHao