1

次のコード(スニペット)を実行しようとすると、エラー(件名に記載)が発生しました。エラーは、以下のコードの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」のゲッターメソッドとセッターメソッドを定義しました。プロパティと合成を使用してサブジェクトにエラーを発生させる方法に問題がありますか?これに関するアドバイスは大歓迎です。

よろしくお願いします

ジェンホー

4

1 に答える 1

2

プロパティにドット表記を使用するには、変数のクラスを静的に型指定またはキャストする必要があります。つまり、コードは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クラスのヘッダーが含まれていることを確認してください。

于 2011-04-04T02:50:54.003 に答える