'setBounds'参数1的类型不兼容

时间:2010-02-01 20:51:53

标签: objective-c

我正在尝试自己创建自定义类并学习C和Objective C.我收到了参数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 shapes [4]; //我不一样了!

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

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

2 个答案:

答案 0 :(得分:3)

如果有另一个名为setBounds:的方法,那么使用类型id通常会导致编译器选择第一个遇到的setBounds:(用于确定返回类型和参数类型),并且因为你的可能不是第一个,它给出了错误。您需要通过将类型从setBounds:更改为id来告诉编译器您要使用 Shape *,但您也可以投射id 1}}到Shape *它也应该有效:

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

答案 1 :(得分:0)

使用您的代码,shapes[0]只是id,编译不知道有setBounds:。 相反,您应该将shapes声明为

Shape* shapes[4];

顺便说一句,如果你有错误,请准确发布编译器吐出的错误,而不仅仅是说'...不兼容',因为有很多方法可以使一个东西不兼容!明确地写下来会帮助人们回答你的问题,因为这样我们就不必猜测究竟发生了什么。最终,您自己将能够从错误消息中了解出现了什么问题。