2011-11-04 4 views
0

J'ai un autre problème étrange avec l'héritage Objective C. J'ai un protocole appelé IGameObject, une classe GameObject qui hérite de NSObject et IGameObject et enfin un Player qui hérite de GameObject ..Une autre bizarrerie avec l'héritage ObjC

Le problème est que lorsque j'attribue un Player * à un objet IGameObject *, cela génère une erreur, mais ça marche bien quand j'attribue un Player * à un GameObject *. Je n'ai pas vu que ce n'est pas possible dans tout ce que j'ai lu. Voici le code:

-(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]; 
} 

Quelqu'un pourrait-il deviner ce qui se passe?

Merci d'avance.

Répondre

4

Lors du renvoi (ou de la déclaration) d'un type qui n'est connu que par son interface, ne le traitez pas comme un pointeur d'objet. , Utilisez plutôt:

-(id<IGameObject>) clone { 

Et:

id<IGameObject> go=p; 

Cela devrait éclaircir cet avertissement.

Sidenote: Pourquoi dans le monde sont vous mandatant p à une adresse mémoire ?!

+0

C'était juste un test rapide pour voir où le problème était. C'était tout, merci beaucoup pour la réponse rapide. – Notbad

0

Vous ne pouvez pas créer un pointeur vers un protocole

IGameObject* go=p; 

n'a pas de sens.