2013-05-30 91 views
0

我有以下功能:類函數語法混亂

int Player::calcInitiative(string name, int Dex, int Mod, int Lvl, int& diceRoll) { 

int Init = 0; 

Init = (Lvl/2) + Dex + Mod + diceRoll; 

return Init; 
} 

在其他地方我都實例化幾個對象,像這樣:

Player Derek("Derek", 2, 0, 6, rollD); 

我現在想用的功能,所以已經嘗試:

Derek.calcInitiative; 

但編譯器告訴我參數列表丟失。我不想在通話中重新輸入參數,因爲它們已經爲玩家定義,如上所述。我想我的上面的電話就夠了。我該如何改變它,以便它可以識別玩家已有的特徵?

+2

如果你想使用成員變量,使用成員變量,不要打擾函數的參數。或者在沒有參數的情況下實現對函數的重載,這些參數以成員變量作爲參數調用參數化函數。 –

回答

0

你只需要指定參數的正確數量和類型的功能:基於函數的定義

calcInitiative(string name, int Dex, int Mod, int Lvl, int& diceRoll) 

它需要你通過string, int, int, int, int類型參數。

Derek.calcInitiative; 

應該是:

//calling outside class scope 
Derek.calcInitiative(getName(), getDex(), getMod(), getLvl(), getDiceRoll()); 
//^^assume that get*() are getters and your class members are private 

的一點是,你MUST提供正確的數量和參數類型。

0

您在

Player Derek("Derek", 2, 0, 6, rollD); 

提供的論據是,傳遞給Player類的構造函數參數。它們與函數calcInitiative的論點完全沒有關係。正如你所寫,你的calcInitiative擁有自己獨立的一套論據。每次撥打電話calcInitiative時,您都必須指定這些參數。沒有辦法繞過它。

如果你是編寫Player類的人,那麼你應該已經明白了。如果你想寫calcInitiative,這樣它就可以被調用而沒有任何爭論,那麼你應該完成那個。但你宣佈它爲

calcInitiative(string name, int Dex, int Mod, int Lvl, int& diceRoll) 

這意味着它需要參數。