2010-02-01 100 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

相關問題