2011-05-03 94 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;