最初我在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 *'
怎么了?
答案 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 ++进行强制转换。)