0

SSharedAppState.h

#import <Foundation/Foundation.h>

enum {
    SharedCompletedStepNone    = 0,
    SharedCompletedStepOne     = 1 << 0,
    SharedCompletedStepTwo      = 2 << 1,
    SharedCompletedStepThree   = 3 << 2
};
typedef NSUInteger SharedCompletedSteps;

@interface SSharedAppState : NSObject
{
    struct {
        unsigned int sharedCompletedStepMask:3;
    } _appFlags;
}
@property (assign, nonatomic) SharedCompletedSteps sharedCompletedStep;

+(id)sharedInstance;
@end

SSharedAppState.m

#import "SSharedAppState.h"

#pragma mark - C functions


#pragma mark - Interface Extension

typedef struct _appFlags AppFlags;
@interface SSharedAppState ()

@property (unsafe_unretained, nonatomic) AppFlags *appFlags;
-(void *)newAppFlags;
@end

#pragma mark - Implementation

@implementation SSharedAppState
@synthesize appFlags;

#pragma mark - Iniitalizer

-(id)init
{
    self = [super init];
    if (self) {

//        appFlags = (AppFlags *)malloc(sizeof(_appFlags));
        appFlags = (AppFlags *)newAppFlags();
        appFlags->sharedCompletedStepMask = 0;
        appFlags.sharedCompletedStepMask = 0;
    }
    return self;
}

+(SSharedAppState *)sharedInstance
{
    static dispatch_once_t onceToken;
    static id sharedInstance;
    dispatch_once(&onceToken, ^{
        sharedInstance = [[self alloc] init];
    });
    return sharedInstance;
}

#pragma makr - Struct _appFlags

-(void *)newAppFlags
{
    AppFlags *instance = (AppFlags *)malloc(sizeof(_appFlags));
    return instance;
}


@end

質問

  1. appFlags = (AppFlags *)newAppFlags();

関数の暗黙の宣言を与えますnewAppFlagsはC99では無効です

  1. appFlags-> sharedCompletedStepMask = 0; appFlags.sharedCompletedStepMask = 0;

タイプ'struct_appFlags'の不完全な定義メンバー参照タイプ'AppFlags*'(別名'struct _appFlags *')はポインターです。多分あなたは'->'を使うつもりでしたか?

次の警告とエラーが表示されます。ここに質問を投稿するのはこれが初めてなので、htmlまたは編集に関するアドバイスをお願いします。ありがとうございました!

4

1 に答える 1

2

このように書くと

struct {
    unsigned int sharedCompletedStepMask:3;
} _appFlags;

名前のない構造体の変数 _appFlags を宣言しています。

あなたはおそらく意味した

struct _appFlags {
    unsigned int sharedCompletedStepMask:3;
};

またはあなたが書くことができます

typedef struct _appFlags {
    unsigned int sharedCompletedStepMask:3;
} AppFlags;
于 2012-08-09T06:14:19.187 に答える