我对Objective C继承有另一个奇怪的问题。我有一个名为IGameObject的协议,一个继承自NSObject和IGameObject的GameObject类,最后是一个继承自GameObject的Player ..
问题在于,当我将Player *分配给IGameObject *时,会产生错误,但是当我将Player *分配给GameObject *时,它可以正常工作。我没有看到这在我读过的所有内容中是不可能的。代码如下:
-(IGameObject*) clone
{
Player* p=(Player*) 0xFFfFFFFF;
//Throws an error saying that Cannont initialise a variable of type IGameObject with an value of Player*
IGameObject* go=p;
//This works perfectly
GameObject* go2=p;
return [[Player alloc] initWithGameObject:self];
}
有人能猜出发生了什么吗?
提前致谢。
答案 0 :(得分:4)
当返回(或声明)仅由其接口知道的类型时,不要将其视为对象指针。相反,使用:
-(id<IGameObject>) clone {
和
id<IGameObject> go=p;
这应该清除警告。
旁注:为什么在世界中您将p
分配给内存地址?!
答案 1 :(得分:0)
您无法创建指向协议的指针
IGameObject* go=p;
毫无意义。