7

私はそのようなヘッダファイルを作成しようとしています:

#import <UIKit/UIKit.h>

typedef void (^RevealBlock)();

@interface BFTasksViewController : UITableViewController <UITableViewDataSource, UITableViewDelegate> {
@private
    RevealBlock _revealBlock;
}

- (id)initWithTitle:(NSString *)title withRevealBlock:(RevealBlock)revealBlock;

@end

しかし、次の警告が表示されます。

typedef 'RevealBlock' の再定義は C11 機能です

これは心配する必要がありますか?私はGHSidebarNav プロジェクトを見ていますが、これはうまく使用されているようです。

4

3 に答える 3

6

RevealBlockUIKit/UIKit.h 以外のインポートが表示されないため、別の場所で宣言している必要があり.pchます。競合するヘッダーがないかプロジェクト ファイルを確認してください (または、スニペットを短くするためにいくつかのヘッダーを削除した可能性がありますか?)。

于 2012-09-10T20:43:14.203 に答える
3

これは心配する必要がありますか?

C または ObjC プログラムをコンパイルしていて、コンパイラが C11 をサポートしていない場合、コンパイラはそのプログラムを拒否する必要があります (たとえば、GCC 4.2-Apple/LLVM は、あなたまたはあなたのプログラムを使用している誰かが使用している可能性があります)。C++ は長年にわたって複数の定義をサポートしてきたことに注意してください。

もちろん、複数のファイルに現れるこれらの定義は、同じタイプとして使用する場所が常に一致している必要があります。そうしないと、呼び出しが行われる前に、コンパイラがパラメーターを正しく設定しない可能性があります。

于 2012-09-10T21:13:48.473 に答える