【问题标题】:Semantic warning on xcode 4xcode 4上的语义警告
【发布时间】:2011-10-03 00:41:30
【问题描述】:

我在 Xcode 4 上收到语义警告: *'struct sockaddr_in'的声明在这个函数之外是不可见的* 该结构似乎在 netinet/in.h 中声明

警告在 Reachability.h 上被标记,这是我从 Apple 示例中下载的一个类。

#import <Foundation/Foundation.h>
#import <SystemConfiguration/SystemConfiguration.h>

typedef enum {
    NotReachable = 0,
    ReachableViaWiFi,
    ReachableViaWWAN
} NetworkStatus;
#define kReachabilityChangedNotification @"kNetworkReachabilityChangedNotification"

@interface Reachability: NSObject
{
    BOOL localWiFiRef;
    SCNetworkReachabilityRef reachabilityRef;
}

//reachabilityWithHostName- Use to check the reachability of a particular host name. 
+ (Reachability*) reachabilityWithHostName: (NSString*) hostName;

//reachabilityWithAddress- Use to check the reachability of a particular IP address. 
+ (Reachability*) reachabilityWithAddress: (const struct sockaddr_in*) hostAddress;

//reachabilityForInternetConnection- checks whether the default route is available.  
//  Should be used by applications that do not connect to a particular host
+ (Reachability*) reachabilityForInternetConnection;

//reachabilityForLocalWiFi- checks whether a local wifi connection is available.
+ (Reachability*) reachabilityForLocalWiFi;

//Start listening for reachability notifications on the current run loop
- (BOOL) startNotifier;
- (void) stopNotifier;

- (NetworkStatus) currentReachabilityStatus;
//WWAN may be available, but not active until a connection has been established.
//WiFi may require a connection for VPN on Demand.
- (BOOL) connectionRequired;
@end

我不明白这个警告,谁能给我解释一下? 谢谢。

【问题讨论】:

    标签: macos cocoa forward-declaration


    【解决方案1】:

    有人针对该行为提交了错误报告,并得到了某人 here 的回复。从本质上讲,问题在于您在方法的参数中声明了一个新结构(就编译器而言),因此无法在其他地方访问它。

    有一个快速修复它。只需将以下行添加到Reachability.h

    #import <netinet/in.h>
    

    【讨论】:

    • 查看@brainjam 的答案以获得更优雅的解决方案,不会引入头文件膨胀。
    【解决方案2】:

    您是在方法参数中声明一个新结构,而不是在文件范围内。

    如果您在文件开头(@interface 部分之前的某个位置)添加前向声明,警告将消失。

    struct sockaddr_in ;
    

    这样做而不是 #import &lt;netinet/in.h&gt; 可以避免头文件膨胀。

    (说到减少标题膨胀,您可以通过替换行来减少 Reachability.h 中的标题使用

    #import <Foundation/Foundation.h>
    #import <SystemConfiguration/SystemConfiguration.h>
    

    #import <SystemConfiguration/SCNetworkReachability.h>
    

    )

    【讨论】:

      【解决方案3】:

      在 Reachability.h 中添加 #import 以摆脱这个问题

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-20
        • 2011-07-18
        • 1970-01-01
        • 1970-01-01
        • 2012-09-02
        • 2023-04-04
        相关资源
        最近更新 更多