我也看到过类似的错误问题。在将代码重构为Arc之后,我得到了接收器类型“CGPointObject”,例如消息是一个向前声明错误。并且建议将@class方法移到声明的.h文件和#import .h文件中,并明智地使用{
我做了所有建议,但仍然出现错误。
CCParallaxNode-Extras.h
#import "cocos2d.h"
@class CGPointObject;
@interface CCParallaxNode (Extras)
-(void) incrementOffset:(CGPoint)offset forChild:(CCNode*)node;
@end
CCParallaxNode-Extras.m
#import "CCParallaxNode-Extras.h"
#import "CCParallaxNode.h"
@implementation CCParallaxNode(Extras)
-(void) incrementOffset:(CGPoint)offset forChild:(CCNode*)node
{
for( unsigned int i=0;i < parallaxArray_->num;i++) {
CGPointObject *point = parallaxArray_->arr[i];
if( [[point child] isEqual:node] ) {
[point setOffset:ccpAdd([point offset], offset)];
break;
}
}
}
@end
类的定义:CCParallaxNode.m
#import "CCParallaxNode.h"
#import "Support/CGPointExtension.h"
#import "Support/ccCArray.h"
@interface CGPointObject : NSObject
{
CGPoint ratio_;
CGPoint offset_;
CCNode *child_; // weak ref
}
@property (nonatomic,readwrite) CGPoint ratio;
@property (nonatomic,readwrite) CGPoint offset;
@property (nonatomic,readwrite,assign) CCNode *child;
+(id) pointWithCGPoint:(CGPoint)point offset:(CGPoint)offset;
-(id) initWithCGPoint:(CGPoint)point offset:(CGPoint)offset;
@end
@implementation CGPointObject
@synthesize ratio = ratio_;
@synthesize offset = offset_;
@synthesize child=child_;
+(id) pointWithCGPoint:(CGPoint)ratio offset:(CGPoint)offset
{
return [[[self alloc] initWithCGPoint:ratio offset:offset] autorelease];
}
-(id) initWithCGPoint:(CGPoint)ratio offset:(CGPoint)offset
{
if( (self=[super init])) {
ratio_ = ratio;
offset_ = offset;
}
return self;
}
@end
我该如何解决以上问题?
最佳答案
像应该那样在#import "CCParallaxNode.h"
中包括CCParallaxNode-Extras.m
,但是根据CCParallaxNode.m
,您要同时定义@interface
和@implementation
。您需要将@interface
部分从CCParallaxNode.m
中移出,并移到头文件中。
CCParallaxNode.h
//Add necessary includes ...
@interface CGPointObject : NSObject
{
CGPoint ratio_;
CGPoint offset_;
CCNode *child_; // weak ref
}
@property (nonatomic,readwrite) CGPoint ratio;
@property (nonatomic,readwrite) CGPoint offset;
@property (nonatomic,readwrite,assign) CCNode *child;
+(id) pointWithCGPoint:(CGPoint)point offset:(CGPoint)offset;
-(id) initWithCGPoint:(CGPoint)point offset:(CGPoint)offset;
@end