c++ 未使用从函数返回的值

1rhkuytd  于 2023-04-01  发布在  其他
关注(0)|答案(1)|浏览(122)

对C++来说相当陌生虽然我学过java.下面的代码是假设在受到伤害后计算玩家的生命值,假设他们是脆弱的.问题是,spellFireDamage并没有降低玩家的生命值,而poisonDamage是.我查了查,学习了过载,但两个参数的伤害不正确工作?这是否需要与过载有关,我做错了?我如何解决这个问题?为什么只有一个参数的函数可以正确工作?提前感谢

`#include <iostream>

using namespace std;

int damage(int spellsDamage) {
    return(spellsDamage*3+5);
}

int damage(int health, int spellsDamage) {
    return (health - (spellsDamage*3+5));
}

int main(){
    int spellFireDamage = 3;
    int spellPoisonDamage = 2;
        int playerHealth = 100;
    bool playerVulnerable = true;
    

    //do something if vulnerable is true
    if (playerVulnerable) {
        damage(playerHealth, spellFireDamage);
        cout << "player health after fire attack" << endl;
        cout << playerHealth << endl;
        playerHealth = playerHealth - damage(spellPoisonDamage);
        cout << "player health after poison attack" << endl;
        cout << playerHealth << endl;
    }
    else {
        cout << "bruh" << endl;
    }
    

        return 0;
}
`

如果我只给spellFireDamage传递一个参数(比如spellPoisonDamage),它就能正常工作,但是我希望我的代码尽可能的简单,并且仍然想知道为什么当我传递两个操作符时,我的函数不能正常工作。我查找了一下,发现它与通过引用传递有关,但是我不太明白。请解释我如何用最简单/干净的方式修复这个问题!谢谢!

xzlaal3s

xzlaal3s1#

我猜你想要的是:

void damage(int &health, int spellsDamage) {
    health -= spellsDamage * 3 + 5;
}

也就是说,函数的双参数版本应该将health减少spellsDamage * 3 + 5health通过引用传递,以便函数可以修改 *caller的 * 变量。
但我不会有两个如此相似的函数,尤其是有相同的名字。只要下定决心你想让函数做什么,并坚持下去。

相关问题