开发者

Objective C: Request for member XXX in something not a structure or union

开发者 https://www.devze.com 2023-02-21 16:30 出处:网络
I hit the error (stated in the subject) when trying to run the following code (snippet). The error is pointing to my 3rd and 4th lines of the code below.

I hit the error (stated in the subject) when trying to run the following code (snippet). The error is pointing to my 3rd and 4th lines of the code below.

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

Prior to this set of code I had defined the enum and struct for ShapeColor and ShapeBoundary as below

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

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

Also, I have defined my interface and implementation of a "Circle" class

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

@property ShapeColor fillColor;  
@property ShapeBoundary shapeBounds;  

@end  

@implementation Circle  

@synthesize fillColor;  
@synthesize shapeBounds;  

@end

I used @property and @synthesize to define my getter and setter methods for "fillColor" and 'Shapebounds". Is there something wrong with the way I am using property and synthesize to cause the error in the subject? Or is there anything I am missing out. Any advise on this is greatly appreciated.

Thanks and Re开发者_JAVA技巧gards

Zhen Hoe


In order to use dot notation for properties, the class of the variable must be statically typed or cast. That is, your code must declare the class of the object instead of using id. If you used Circle *shape[3];, or ((Circle*)shape[0]).fillColor then your errors would go away. When you want your variable to be dynamically typed (using id), you need use the equivalent methods to get the properties:

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

Also make sure you include the header for the Circle class in the file where you are doing this.

0

精彩评论

暂无评论...
验证码 换一张
取 消