#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;
бессмысленно.