2011-06-07 64 views
0

可能重複:
Method overloading in Objective-C?是方法重載不可能

是方法重載不可能的。 我有兩個同名的函數。 當聲明像下面我設置錯誤。

-(RS232Msg*)CreateMessage:(REMOTE_MESSAGE_ID) nMessageNumber; 
-(RS232Msg*)CreateMessage:(const uint8_t*) szMessageName; 

宣佈時-(RS232Msg*)CreateMessage:(const uint8_t*) szMessageName;我沒有收到任何錯誤。 我也有兩個函數作爲具有不同返回類型和參數的相同名稱,但其工作正常,並且在其聲明中沒有錯誤。 這是爲什麼?

+0

我傳遞的參數的類型是不同的。爲什麼是錯誤。 – spandana 2011-06-07 11:02:39

+2

,因爲方法重載不支持:)原因是參數類型不是方法簽名的一部分在objective-c中。只有他們的名字重要。 – Vladimir 2011-06-07 11:06:03

+0

@Vladimir&Itai:謝謝你解釋。 – spandana 2011-06-07 11:24:26

回答

3

不,方法重載在C中是不可能的,因此在Objective-C中不可能(因爲Objective-C是C的超集)。如果你想使用這兩種方法,你必須改變他們的名字。我會建議如下:

- (RS232Msg *)createMessageWithMessageID:(REMOTE_MESSAGE_ID)nMessageNumber; 
- (RS232Msg *)createMessageWithName:(const uint8_t*)szMessageName; 
+0

這不會改變他們的類型簽名,這是改變他們的名字。這就是整個觀點 - 不支持使用相同名稱的不同類型簽名。 – 2011-06-07 12:11:22

+0

@Sherm Yeesh,對於這個明顯的錯誤感到抱歉。你是對的!固定。 – 2011-06-07 19:20:11

+0

不用擔心 - 儘管如此,這是一個很好的答案,而且我也不會因爲輸入錯誤而投票。 :-) – 2011-06-07 22:45:42