2

このコードのpchファイルがあります:

#import "ServerModel.h"

enum {
    SAVE = 1,
    REMOVE = 2,
    REMOVE_ALL = 3
};
typedef NSInteger RequestType;

ServerModel.hで使用しようとしていますRequestTypeが、コンパイラは私の列挙型について何も知りません。列挙型のヘッダーファイルを作成し、このファイルをpch-fileにインポートしようとしましたが、何も変更されていません。

#importしたがって、基本的な問題は次のとおりです。このpchファイルで編集されたファイルで.pchファイルの列挙型を使用できません。

この問題を処理する方法はありますか?そして、pch-fileは列挙型をそこに置くのに良い場所ですか?

UPD:

#importこのすべての列挙型を1つのヘッダーファイルに入れ、このファイルをpch-fileのすべてのsの最後に入れようとしましたが#import、機能しません。しかし、私は置きます

#import "Enums.h" // my file with enums

pch-fileの先頭で、他#importのすべてのファイルの前に、それが機能しています。

#import他の人の前後の配置の違いを誰かが説明してくれたら嬉しいです#import

UPD2:

私はそれをより明確にしようとします:

私はEnums.h列挙型を持っています:

enum {
    SAVE = 1,
    REMOVE = 2,
    REMOVE_ALL = 3
};
typedef NSInteger RequestType;

MyProject-Prefix.pchと:

#import "ServerModel.h"
#import "Enum.h"

そしてServerModel.h次のコードで:

- (void)unlinkAccountWithRequestType:(RequestType)requestType;

Expected a typeこのメソッドでエラーが発生しました。プロジェクトをクリーンアップしましたが、同じエラーが発生しました。

私が#importこのように切り替えるとき:

#import "Enums.h"
#import "ServerModel.h"

すべてが良いです

4

1 に答える 1

2

ケース1:このようにインポートした場合

#import "ServerModel.h"
#import "Enums.h"

次に、コンパイラは、ステートメントに遭遇するServerModel.h前にファイルをチェックします。そして、あなたをチェックしている間、それはを見つけて、 WTFがRequestTypeであると言いますか?そしてあなたの顔にエラーを投げます。Enums.h#import "ServerModel.h"ServerModel.htoken RequestType

ケース2:これを書く場合

#import "Enums.h"
#import "ServerModel.h"

次に、コンパイラEnums.hは正常にコンパイルされてからコンパイルServerModel.hされ、再びaが検出され、 「これはで定義されているものであるtoken RequestTypeことがわかります」と表示されます。そして最後にそれは楽しく動きます。typedefNSIntegerEnums.h

于 2013-01-21T10:16:29.790 に答える