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;

但是编译器告诉我参数列表丢失了。我不想在调用中重新输入参数,因为它们已经为玩家定义了,如上所述。我认为我上面的电话就足够了。我怎样才能改变它,以便它能够识别玩家已经拥有的特征?

4

2 回答 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提供了正确数量和类型的参数。

于 2013-05-30T18:48:43.633 回答
0

您提供的参数

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

是传递给类的构造函数Player的参数。它们与 function 的参数完全没有关系calcInitiative。你的calcInitiative,正如所写的,有自己独立的一组论点。而且每次调用时都必须指定这些参数calcInitiative。没有办法解决它。

如果你是写 class 的人Player,那么你应该已经明白了。如果您想编写calcInitiative这样它就可以在没有任何参数的情况下调用,那么您应该这样做。但是您将其声明为

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

这意味着它需要参数。

于 2013-05-30T19:03:05.417 回答