2013-03-08 65 views
1

最初,我在LoginViewController.m中包含以下警告的文件,我忽略了它。代碼工作正常。將目標C文件擴展名從.m更改爲.mm會導致錯誤

warning: sending 'LoginViewController *' to parameter of incompatible type 'id<NSStreamDelegate>' 

但現在我把文件擴展名改爲.mm(LoginViewController.mm)。由於這個錯誤,現在我不能再構建項目了。

Cannot initialize a parameter of type 'id<NSStreamDelegate>' with an lvalue of type 'LoginViewController *' 

怎麼了?

回答

7
warning: sending 'LoginViewController *' to parameter of incompatible type 'id<NSStreamDelegate>' 

這個警告是由於這樣的事實,你是不符合協議NSStreamDelegate當您定義類LoginViewController。理想情況下,你的類應該符合該協議,以便當你將它設置給委託時,它可以理解你正在實現它期望的任何委託方法。

的如: -

@interface LoginViewController : UIViewController<NSStreamDelegate> {} 

一旦你有固定的這個,你不應該得到,當你切換到.mm類而來的其他錯誤。

2

C++比C有更嚴格的輸入規則。LoginViewController沒有聲明符合該協議,所以指針類型不兼容,這是C++中的一個硬錯誤。聲明一致性應解決它。 (你仍然可能遇到比以前更多類型的錯誤,因爲事情是用C無聲的轉換,需要用C石膏++)

+3

甚至沒有。他只需要遵守協議! – CodaFi 2013-03-08 23:10:23

+0

@CodaFi:哦,你說得對。我精闢地剔除了錯誤的實際細節,並假設它是我在Objective-C++中經常遇到的那種事情。 – Chuck 2013-03-08 23:11:30

+0

我可以看到發生了!我知道當我看到左值時,輪子開始轉動。 – CodaFi 2013-03-08 23:42:58

相關問題