2011-05-03 71 views
0

所以,我有一個叫做Stone的課。 在Stone.h我有這些行:@property失敗,出了什麼問題?

@interface stone : CCNode <CCTargetedTouchDelegate> { 
GameLayer *theGame; 
} 
@property(readwrite,nonatomic, retain) GameLayer *theGame; 
@property(readwrite,nonatomic,retain) CCSprite *mySprite; 

和我Stone.m

@implementation Stone 

@synthesize theGame,mySprite; 

這是所有相關的代碼。但編譯器說 - 沒有聲明屬性theGame和mySprite在界面中找到。 更糟糕的是,這是一本書的例子,我做錯了什麼?我檢查了它和書中的完全一樣的代碼。

爲什麼沒有看到.h文件中屬性的聲明? #import聲明在那裏。 我認爲這是指針問題,但它也沒有看到純整數的屬性 - @property(readwrite, assign) int stoneType;例如返回相同的錯誤。

回答

9

@interface中的小寫'stone',@implementation中的大寫'Stone'。

+0

謝謝,這真的幫助。 24個錯誤消失了! – Dvole 2011-05-03 19:16:18

0

首先你應該在Interface之後寫Stone(大寫)。

其次,界面中沒有變量「mySprite」。

+0

隨着現代運行時,需要對性能沒有明確的變量聲明;他們將自動合成。當這個問題被標記爲[iphone]時,現代運行時肯定適用。 – 2011-05-03 19:19:36

+1

如果使用現代Objective-C運行時(iOS 3.x +或64位Snow Leopard以上版本),那麼當您合成屬性時,IVAR實際上也會爲您合成。 – InsertWittyName 2011-05-03 19:20:06

+0

好吧thx你是對的;-) – tamasgal 2011-05-03 19:44:46

4

更改 '石頭' 在這裏:

@interface stone : CCNode <CCTargetedTouchDelegate> { 
GameLayer *theGame; 
} 
@property(readwrite,nonatomic, retain) GameLayer *theGame; 
@property(readwrite,nonatomic,retain) CCSprite *mySprite; 

石:

@interface Stone : CCNode <CCTargetedTouchDelegate> { 
    GameLayer *theGame; 
    } 
    @property(readwrite,nonatomic, retain) GameLayer *theGame; 
    @property(readwrite,nonatomic,retain) CCSprite *mySprite;