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);

classのコンストラクタに渡される引数です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 に答える