2013-08-21 69 views
0

也許標題不夠合適。使用在代碼中聲明的類,在其他類中

我有兩個類「玩家」和「升級」

  • 播放器升級之前聲明。

但我需要在使用的指針升級類

如果我嘗試編譯它,我得到「升級」尚未聲明Player類的方法。 我給出了一個示例代碼。請注意,我不能隨便切換兩個類的位置,因爲升級有也是有指向球員

class Player{ 
    string Name; 
    getUpgrade(Upgrade *); // It's a prototype 
}; 
class Upgrade{ 
    double Upgradeusec; 
    somePlayerData(Player *); // It's a prototype 
}; 

PD一些方法:我一直在尋找這個像1個小時,沒有結果。

注意:這僅僅是一個示例代碼,因爲真正的人去大

+0

請刪除它。它沒有解決方案。 C++語言不允許嵌套類前向聲明​​。我明白了,更好地使用引用「父類」的嵌套類的insteat –

回答

3

您需要轉發申報升級提前Player類的定義;例如

class Upgrade; 
class Player { ... }; 
class Upgrade { ... }; 

當然,這意味着這兩個類視情況而定,可能是不可取之間的非常緊密的耦合。

+0

好吧,它會工作。但我試圖訪問一個內部類。升級::需求。 '結構升級'中的'Requisites'沒有命名類型。 +1,因爲給我提供有關「前向聲明」的有用信息 –

+0

啊。我不認爲這在C++中是允許的。見http://stackoverflow.com/questions/1021793/how-do-i-forward-declare-an-inner-class – sfjac

2

您可以轉發聲明它。

在具有該類球員的代碼只是在頂部後添加以下行的文件中的所有#includes#defines

class Upgrade; 

class Player 
{ 
     //the definition of the Player class 
} 

編譯器會接受此向前聲明,並會繼續毫無怨言。

0

您需要前向聲明。 http://en.wikipedia.org/wiki/Forward_declaration 當不完整的類型可以使用時,C++有很多複雜的規則。

class Upgrade; //<<<< add this line. 
Class Player{ 
    string Name; 
    getUpgrade(Upgrade); // It's a prototype 
}; 
Class Upgrade{ 
    double Upgradeusec; 
    somePlayerData(Player); // It's a prototype 
}; 
1

What is forward declaration in c++?

只是在你的代碼添加前向聲明:

class Upgrade; //forward declaration 
class Player{ 
    string Name; 
    getUpgrade(Upgrade *); // It's a prototype 
}; 
class Upgrade{ 
    double Upgradeusec; 
    somePlayerData(Player *); // It's a prototype 
} 

;