2010-02-01 145 views
1

我想要做我自己的自定义类并学习C和Objective C.我收到了参数1存在不兼容类型的错误。我定义了一个struct和类这样的:'setBounds'参数1的不兼容类型

typedef enum { 
kRedColor, 
kGreenColor, 
kBlueColor 
} ShapeColor; 


typedef struct { 
int x, y, width, height; 
} ShapeRect; 


@interface Shape : NSObject 
{ 
ShapeColor fillColor; 
ShapeRect bounds; 
} 

- (void) setFillColor: (ShapeColor) fillColor; 
- (void) setBounds: (ShapeRect) bounds; 
- (void) draw; 

@end // Shape 

然后我导入Shape.h文件(上面的代码),并尝试并创建一个形状是这样的:

ID形状[4]; // 我与众不同!

ShapeRect rect0 = {0,0,10,30}; 形状[0] = [形状新]; [shapes [0] setBounds:rect0];

我得到setBounds不兼容的错误。出于某种原因,它没有在setBounds方法中查看Shape.h类,而是查看默认的setBounds方法?有什么我做错了吗?谢谢!

+0

了解Objective- C在Mac上偶然?我有同样的问题。 – Aaron 2010-04-24 19:32:46

+0

顺便说一句,这是一个“不兼容类型的争论”编译错误 – Aaron 2010-04-24 19:42:16

回答

0

与您的代码shapes[0]只是一个id,为此编译不知道有setBounds:。 相反,你应该申报shapes作为

Shape* shapes[4]; 

顺便说一句,如果你有一个错误,请张贴什么错误是由编译器吐出,不只是说“......是不兼容的”,因为有许多事情可以不相容!明确地写下来会帮助人们回答你的问题,因为那样我们不必准确猜测发生了什么。最终,你自己可以从错误信息中了解到哪里出了问题。

3

如果有一种叫setBounds:然后用型id通常会导致编译器采摘方法,第一个遇到setBounds:(确定返回类型和参数类型),由于你可能不是第一个,它是给错误。要么你需要告诉你需要通过更改类型从idShape *使用setBounds:编译器,但你也可以投你idShape *,它也应该工作:

[(Shape *)shapes[0] setBounds:rect0]; 
+0

谢谢!解决了我的问题:-) – Aaron 2010-04-24 19:38:40

相关问题