类函数语法混乱

Class Function Syntax Confusion

本文关键字:混乱 语法 类函数      更新时间:2023-10-16

我有以下功能:

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;

但是编译器告诉我缺少参数列表。我不想在调用中重新输入参数,因为它们已经为玩家定义过了。我想我上面的电话就够了。我该如何改变它,让它能够识别玩家已经拥有的特征?

您只需要为函数指定正确的参数数量和类型:

基于函数定义:

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

您在

中提供的参数
Player Derek("Derek", 2, 0, 6, rollD);

是传递给类Player构造函数的参数。它们与函数calcInitiative的实参完全没有关系。您的calcInitiative,如所写,有自己的,独立的一组参数。每次调用calcInitiative时都必须指定这些参数。没有别的办法。

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

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

这意味着它需要参数