Objective-C:导入头文件时为什么会出现编译错误?

时间:2009-04-07 02:12:30

标签: iphone objective-c cocoa cocoa-touch

我很好奇为什么原因可能是因为只是导入头文件而导致编译错误。如果我发表评论,一切都编译得很好 - 我试图导入我的一个UIViewController的类的头/实现得到了传递编译器而没有任何警告。但是,只要我加入它,我就会遇到很多错误。

我正在尝试在自己的代码中使用Apple的Reachability应用程序,并执行以下操作:

#import "Reachability.h"

我得到了很多:

error: syntax error before 'target'
error: syntax error before 'SCNetworkReachabilityFlags'
error: syntax error before 'SCNetworkReachabilityRef'
error: syntax error before 'SCNetworkReachabilityRef'
fatal error: method definition not in @implementation context

这主要是抱怨:

static void ReachabilityCallback(SCNetworkReachabilityRef target,       SCNetworkReachabilityFlags flags, void *info);
- (BOOL)isNetworkAvailableFlags:(SCNetworkReachabilityFlags *)outFlags;
- (SCNetworkReachabilityRef)reachabilityRefForHostName:(NSString *)hostName;
- (CFRunLoopRef)startListeningForReachabilityChanges:(SCNetworkReachabilityRef)reachability onRunLoop:(CFRunLoopRef)runLoop;

知道为什么只有在我尝试导入头文件时才会发生这种情况吗?

3 个答案:

答案 0 :(得分:10)

听起来你可能需要

#import <SystemConfiguration/SystemConfiguration.h>

答案 1 :(得分:2)

该错误几乎总是由错误词之前的单词的非定义引起的(在这种情况下,SCNetworkReachabilityRef之前是target

因此,您还没有定义SCNetworkReachabilityRef和(看起来像)所有其他"SC..."类型。

我不确定SystemConfiguration.h中是否包含Reachability.h (如果您使用的是here中的示例代码)。

该代码包含SystemConfiguration/SCNetworkReachability.h Reachability.h

答案 2 :(得分:0)

在iPhone上,Apple的Reachability的1.5版本包括

#import <SystemConfiguration/SystemConfiguration.h>

但您需要在应用中导入SystemConfiguration框架。你可以在那里得到它/System/Library/Frameworks/SystemConfiguration.framework