Цель C: Запрос члена XXX в нечто, не являющееся структурой или объединением - PullRequest
1 голос
/ 04 апреля 2011

У меня ошибка (указанная в теме) при попытке запустить следующий код (фрагмент). Ошибка указывает на мои 3-ю и 4-ю строчки кода ниже.

id shape[3];  
shape[0] = [[Circle alloc]init];  
shape[0].fillColor = kRed;  
shape[0].shapeBounds = bound0;  

До этого набора кода я определил перечисление и структуру для ShapeColor и ShapeBoundary, как показано ниже

typedef enum
{
kRed,
kBlue,
kGreen,
kPurple
}ShapeColor;

typedef struct
{
int x;
int y;
int width;
int height;
}ShapeBoundary;  

Кроме того, я определил свой интерфейс и реализацию класса "Circle"

@interface Circle : NSObject  
{  
ShapeColor fillColor;  
ShapeBoundary shapeBounds;  
}  

@property ShapeColor fillColor;  
@property ShapeBoundary shapeBounds;  

@end  

@implementation Circle  

@synthesize fillColor;  
@synthesize shapeBounds;  

@end

Я использовал @property и @synthesize для определения моих методов получения и установки для "fillColor" и "Shapebounds". Что-то не так с тем, как я использую свойство и синтез, чтобы вызвать ошибку в теме? все, что я пропускаю. Любой совет по этому вопросу очень ценится.

Спасибо и С уважением

Жень Мотыга

1 Ответ

3 голосов
/ 04 апреля 2011

Чтобы использовать точечную запись для свойств, класс переменной должен быть статически типизирован или приведен.То есть ваш код должен объявлять класс объекта, а не использовать id.Если вы используете Circle *shape[3]; или ((Circle*)shape[0]).fillColor, ваши ошибки исчезнут.Если вы хотите, чтобы ваша переменная была динамически напечатана (используя id), вам нужно использовать эквивалентные методы для получения свойств:

id shape[3];
shape[0] = [[Circle alloc] init];
[shape[0] setFillColor:kRed];
[shape[0] setShapeBounds:bound0];

Также убедитесь, что вы включили заголовок для класса Circle в файлгде вы это делаете.

...