我正在尝试自己创建自定义类并学习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方法?有什么我做错了吗?谢谢!
答案 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];
顺便说一句,如果你有错误,请准确发布编译器吐出的错误,而不仅仅是说'...不兼容',因为有很多方法可以使一个东西不兼容!明确地写下来会帮助人们回答你的问题,因为这样我们就不必猜测究竟发生了什么。最终,您自己将能够从错误消息中了解出现了什么问题。