2013-03-08 62 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

相关问题