我有以下功能:
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;
但是编译器告诉我参数列表丢失了。我不想在调用中重新键入参数,因为它们已经为播放器定义,如上所述。我以为我的上述电话就足够了。如何更改它以便识别玩家已有的特征?
答案 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)
这意味着它需要参数。