2011-11-04 12 views
0

私はObjective Cの継承に別の奇妙な問題があります。私は、NSObjectとIGameObjectから継承するクラスGameObjectであるIGameObjectというプロトコルを持っています。最後にGameObjectから継承するPlayerです。ObjC継承の別の奇妙さ

問題は、Player *をIGameObject *に割り当てると、 GameObject *にPlayer *を割り当てるとうまくいきます。私はこれがすべて私が読んだことでは不可能であることを見ていない。ここにコード:

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

何が起こっているのでしょうか?

ありがとうございます。

答えて

4

インターフェイスでのみ認識される型を返す(または宣言する)ときは、オブジェクトポインタとして扱わないでください。代わりに、使用:

-(id<IGameObject>) clone { 

そして:

id<IGameObject> go=p; 

これは、その警告をクリアする必要があります。

追記:はなぜ世界にあなたはメモリアドレスにpを割り当てています!

+0

問題がどこにあるかを確認するのは簡単なテストでした。それは速い答えのためにたくさんありがとう、それでした。 – Notbad

0

あなたは

IGameObject* go=p; 

は無意味であるプロトコルへのポインタを作成することはできません。