Еще одна странность с наследованием ObjC

#iphone #objective-c

#iPhone #objective-c

Вопрос:

У меня есть еще одна странная проблема с наследованием Objective C. У меня есть протокол под названием IGameObject, класс GameObject, который наследуется от NSObject и IGameObject и, наконец, Player, который наследуется от GameObject..

Проблема в том, что когда я назначаю 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];
 }
  

Кто-нибудь может догадаться, что происходит?

Заранее спасибо.

Ответ №1:

При возврате (или объявлении) типа, который известен только по его интерфейсу, не рассматривайте его как указатель на объект. Вместо этого используйте:

 -(id<IGameObject>) clone {
  

И:

 id<IGameObject> go=p;
  

Это должно устранить это предупреждение.

Примечание: Почему в мире вы назначаете p адрес памяти?!

Комментарии:

1. Это был просто быстрый тест, чтобы увидеть, в чем проблема. Вот и все, большое спасибо за быстрый ответ.

Ответ №2:

Вы не можете создать указатель на протокол

 IGameObject* go=p;
  

бессмысленно.