Ошибки инициализации класса C - PullRequest
2 голосов
/ 30 июня 2009

У меня есть следующая цель класса С. Он предназначен для хранения информации о фильме для настройки стиля кино, идентификатора места проведения и т. Д. Всякий раз, когда я пытаюсь создать объект этого класса:

Film film = [[Film alloc] init];

я получаю следующие ошибки: объект переменного размера не может быть инициализирован, статически размещенный экземпляр класса Objective-C "Film", статически размещенный экземпляр класса Objective-C "Film".

Я довольно новичок в Objective C и, вероятно, все еще застрял в мышлении C #, может кто-нибудь сказать мне, что я делаю неправильно?

Спасибо, Майкл

код:

// Film.m
#import "Film.h"
static NSUInteger currentID = -1;

@implementation Film

@synthesize filmID, title, venueID;

-(id)init {

    self = [super init];

    if(self != nil) {
        if (currentID == -1)
        {
            currentID = 1;
        }
        filmID = currentID;
        currentID++;
        title = [[NSString alloc] init];
        venueID = 0;
    }

    return self;
}

-(void)dealloc {

    [title release];
    [super dealloc];
}

+(NSUInteger)getCurrentID {
    return currentID;
}

+(void)setCurrentID:(NSUInteger)value {
    if (currentID != value) {
        currentID = value;
    }
}

@end

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


@interface Film : NSObject {
    NSUInteger filmID;
    NSString *title;
    NSUInteger venueID;
}

+ (NSUInteger)getCurrentID;
+ (void)setCurrentID:(NSUInteger)value;

@property (nonatomic) NSUInteger filmID;
@property (nonatomic, copy) NSString *title;
@property (nonatomic) NSUInteger venueID;

//Initializers
-(id)init;

@end

1 Ответ

5 голосов
/ 30 июня 2009

Ваша переменная, содержащая ссылку на ваш объект, должна иметь ссылочный тип. Вы делаете это, используя звездочку - см. Ниже:

Film *film = [[Film alloc] init];

Исходя из Java, я часто думаю о вышесказанном как:

Film* film = [[Film alloc] init];

Я склонен связывать маркер 'reference' с типом. Но, надеюсь, кто-то более разбирающийся в C / C ++ / ObjC скажет мне, почему это неправильно, и как на самом деле называется «звездочка» в этом контексте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...