【发布时间】:2014-08-29 10:32:13
【问题描述】:
我在项目的 PCH 文件中键入了一个我常用的 C 块类型:
typedef void (^UserBlock)(PFUser* user);
当我尝试在这样的标头中定义一个 Objective C 方法时:
+(void)ensureUserWithID:(NSString *)userID withCompletion:(UserBlock)completionHandler
我在UserBlock 上收到Expected a type 错误。但是,如果我将 typedef 从 PCH 移动到该头文件的开头,它会编译(带有警告 Redefinition of typedef 'UserBlock' is a C11 feature。我已经清理了构建文件夹,删除了派生数据,重新启动了 Xcode,但我仍然得到同样的错误.我的PCH中也有其他定义,他们只是编译文件。我遇到的所有问题是我的PCH中定义的C块类型。为什么我会遇到这种行为?我在Xcode 5.1.1和LLVM 5.1。
【问题讨论】:
-
我不明白为什么那行不通。你能显示整个前缀文件吗?
-
@trojanfoe pastebin.com/m5WLMcsS(只是暂时注释掉了这行,很明显没有正常注释掉)
-
如果将
typedefs 移到#ifdef __OBJC__块内会发生什么? -
@trojanfoe 没有任何变化。顺便说一句,我在我的应用程序的其他任何地方都使用了这些块类型。这只是我遇到这种奇怪行为的一个地方。
-
@trojanfoe 发现了问题。这是我的错,看我的回答。
标签: c xcode llvm objective-c-blocks llvm-clang