将目标C文件扩展名从.m更改为.mm会导致错误

时间:2013-03-08 23:04:45

标签: ios objective-c cocoa-touch protocols

最初我在LoginViewController.m中有包含下面警告的文件,我忽略了它。代码工作正常。

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 *'

怎么了?

2 个答案:

答案 0 :(得分:6)

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

此警告是由于您在定义类NSStreamDelegate时未遵循协议LoginViewController这一事实。理想情况下,您的类应该符合该协议,以便在将其设置为委托时,它可以理解您正在实现它期望的任何委托方法。

例如: -

@interface LoginViewController : UIViewController<NSStreamDelegate> {}

修复此问题后,您不应该收到更改为.mm类时出现的其他错误。

答案 1 :(得分:2)

C ++具有比C更严格的类型规则.LockViewController不声明与该协议的一致性,因此指针类型不兼容,这是C ++中的一个硬错误。声明一致性应该解决它。 (你仍然可能遇到比以前更多的类型错误,因为在C中进行静默转换的事情需要使用C ++进行强制转换。)