Ios 非目标C指针类型的隐式转换';int*';至';伯德*';不允许使用ARC
Bird、GameWorld和GameSecene是我项目中的三个自定义类 我在类游戏世界中有一个Bird类型的对象(作为属性)。我在GameSecene类中有Bird和Gameworld类型的对象。现在在游戏场景类中,当我执行以下操作时:Ios 非目标C指针类型的隐式转换';int*';至';伯德*';不允许使用ARC,ios,objective-c,xcode,pointers,object,Ios,Objective C,Xcode,Pointers,Object,Bird、GameWorld和GameSecene是我项目中的三个自定义类 我在类游戏世界中有一个Bird类型的对象(作为属性)。我在GameSecene类中有Bird和Gameworld类型的对象。现在在游戏场景类中,当我执行以下操作时: _bird = [_gameWorld bird]; 将发出错误警报: 将非目标C指针类型“int*”隐式转换为“Bird” *“不允许使用ARC 为什么会这样 编辑: 游戏场景 #import <SpriteKit/SpriteKit.h>
_bird = [_gameWorld bird];
将发出错误警报:
将非目标C指针类型“int*”隐式转换为“Bird”
*“不允许使用ARC
为什么会这样
编辑:
游戏场景
#import <SpriteKit/SpriteKit.h>
#import "Bird.h"
#import "ScrollHandler.h"
#import "Pipe.h"
#import "GameWorld.h"
@interface GameScene : SKScene <SKPhysicsContactDelegate>{
int _midPointY;
float _gameHeight;
NSString *_gameName;
NSString *_getReady;
Bird *_myBird;
NSTimeInterval _dt;
float bottomScrollerHeight;
GameWorld *_myWorld;
}
@property (nonatomic) SKSpriteNode* backgroundImageNode;
@property (nonatomic) SKSpriteNode* greenBird;
@property (nonatomic) NSTimeInterval lastSpawnTimeInterval;
@property (nonatomic) NSTimeInterval lastUpdateTimeInterval;
@end
注意:我刚刚发现,当我删除导入“Gameworld.h”时
从“Bird.h”中,错误消失了,它正在工作。导入是在那里意外进行的,不需要。但是我不知道为什么它会导致错误。正如你最后提到的,这是唯一的问题 发生了什么事? 当您将
Gameworld
导入到Bird
接口文件时,您的Gameworld
本身有一个名为Bird
的变量,类型为Bird
。然后,在接下来的几行中定义了Bird
类。在此之前,编译器不知道Bird
对象是什么,默认情况下,它假定它是int
如果您想在Bird
类中声明Gameworld
对象,那么您只需要使用前向声明,而不是将其导入接口
@class Gameworld;
这告诉编译器一个名为
Gameworld
的类确实存在,正如您在最后提到的,这是唯一的问题
发生了什么事?
当您将Gameworld
导入到Bird
接口文件时,您的Gameworld
本身有一个名为Bird
的变量,类型为Bird
。然后,在接下来的几行中定义了Bird
类。在此之前,编译器不知道Bird
对象是什么,默认情况下,它假定它是int
如果您想在Bird
类中声明Gameworld
对象,那么您只需要使用前向声明,而不是将其导入接口
@class Gameworld;
这告诉编译器一个名为
Gameworld
的类确实存在,正如您在最后提到的,这是唯一的问题
发生了什么事?
当您将Gameworld
导入到Bird
接口文件时,您的Gameworld
本身有一个名为Bird
的变量,类型为Bird
。然后,在接下来的几行中定义了Bird
类。在此之前,编译器不知道Bird
对象是什么,默认情况下,它假定它是int
如果您想在Bird
类中声明Gameworld
对象,那么您只需要使用前向声明,而不是将其导入接口
@class Gameworld;
这告诉编译器一个名为
Gameworld
的类确实存在,正如您在最后提到的,这是唯一的问题
发生了什么事?
当您将Gameworld
导入到Bird
接口文件时,您的Gameworld
本身有一个名为Bird
的变量,类型为Bird
。然后,在接下来的几行中定义了Bird
类。在此之前,编译器不知道Bird
对象是什么,默认情况下,它假定它是int
如果您想在Bird
类中声明Gameworld
对象,那么您只需要使用前向声明,而不是将其导入接口
@class Gameworld;
这告诉编译器,类确实存在,名称为
Gameworld
导入语句必须是线性的,但有一个循环<代码>游戏场景.m->游戏场景.h
->鸟.h
->游戏世界.h
->鸟.h
因此,当
GameWorld.h
有#导入“Bird.h”
时,编译器看到Bird.h
已经导入,没有导入。问题是,@interface Bird
尚未定义,因此,GameWorld
没有为Bird
提供正确的接口,导入语句必须是线性的,但有一个循环<代码>游戏场景.m->游戏场景.h
->鸟.h
->游戏世界.h
->鸟.h
因此,当
GameWorld.h
有#导入“Bird.h”
时,编译器看到Bird.h
已经导入,没有导入。问题是,@interface Bird
尚未定义,因此,GameWorld
没有为Bird
提供正确的接口,导入语句必须是线性的,但有一个循环<代码>游戏场景.m->游戏场景.h
->鸟.h
->游戏世界.h
->鸟.h
因此,当
GameWorld.h
有#导入“Bird.h”
时,编译器看到Bird.h
已经导入,没有导入。问题是,@interface Bird
尚未定义,因此,GameWorld
没有为Bird
提供正确的接口,导入语句必须是线性的,但有一个循环<代码>游戏场景.m->游戏场景.h
->鸟.h
->游戏世界.h
->鸟.h
因此,当GameWorld.h
有导入“Bird.h”
时,编译器看到Bird.h
是al