类函数语法混淆

时间:2013-05-30 18:31:11

标签: c++ class syntax

我有以下功能:

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 :(得分: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提供了正确的参数数量和类型。

答案 1 :(得分: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) 

这意味着它需要参数。