1

元々、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 *'

どうしたの?

4

2 に答える 2

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

この警告はNSStreamDelegate、クラスを定義しているときにプロトコルに準拠していないためですLoginViewController。理想的には、クラスをデリゲートに設定するときに、クラスが期待するデリゲートメソッドを実装していることを理解できるように、クラスはそのプロトコルに準拠している必要があります。

例:-

@interface LoginViewController : UIViewController<NSStreamDelegate> {}

これを修正すると、.mmクラスに変更したときに発生する他のエラーが発生することはありません。

于 2013-03-08T23:36:04.743 に答える
2

C ++には、Cよりも厳密な入力規則があります。LoginViewControllerはそのプロトコルへの準拠を宣言しないため、ポインター型に互換性がなく、C++ではハードエラーになります。適合を宣言することでそれを解決できるはずです。(Cでサイレント変換を行っていたものは、C ++でキャストする必要があるため、以前よりも多くのタイプエラーが発生する可能性があります。)

于 2013-03-08T23:05:57.903 に答える