2011-11-04 74 views
0

我有另一個Objective C繼承的奇怪問題。我有一個名爲IGameObject的協議,從NSObject和IGameObject繼承的類GameObject,最後是從GameObject繼承的Player。ObjC繼承的另一個奇怪點

問題是,當我將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]; 
} 

有人可以猜測發生了什麼?

在此先感謝。

回答

4

當返回(或聲明)一個只有它的接口已知的類型時,不要把它當作一個對象指針。相反,使用:

-(id<IGameObject>) clone { 

和:

id<IGameObject> go=p; 

這應該清理的警告。

旁註:爲什麼在世界你分配p內存地址?

+0

這只是一個快速測試,看看問題出在哪裏。就是這樣,非常感謝快速回答。 – Notbad

0

不能創建一個指向協議

IGameObject* go=p; 

是沒有意義的。