gpt4 book ai didi

c++ - setter 不在类方法内部工作

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:27:18 25 4
gpt4 key购买 nike

我是 C++ 的新手,我决定制作一个基于回合制的 RPG 引擎。这是我遇到的问题。我的类 Mob 具有 HPMPStaminaStrength 等属性,和情报。他们都有 getter 和 setter 与他们一起去。我还有 attack() 方法,它接受攻击中涉及的两个暴民。还已经创建了两个 HP 为 100、Stamina 为 30 和 Strength 为 30 的生物(EDIT Strength 实际上是 5。我的错)。无论如何,这里是攻击代码:

srand(time(0));
int damage = mobSend.getStr() * 5 + (rand() % str);
cout << damage << endl;
mobRec.setHP((mobRec.getHP() - damage));
mobSend.setStamina(mobSend.getStamina() - 5);

当我运行程序时,它首先打印出 HP 和 Stamina,运行攻击方法,然后再次打印 HP 和 Stamina。但是,当我运行它时,生物的 HP 或 Stamina 不会下降。我进行了测试以确保 setHP()setStamina() 正常工作,因此我在 main 方法中将 hp 和 stamina 设置为 0,并且成功了。

我尝试了其他方法,例如 loseHP() 将损坏作为参数:

void Mob:: loseHP(int damage) {this->HP -= damage;}

但是还是不行。我在这里做错了什么?我真的在这里被难住了,所以一些帮助将不胜感激。

最佳答案

问题是在将对象传递给 attack() 方法时,您是按值复制对象,因此当您对 mobRec 进行任何更改时mobSend,这些更改实际上并未反射(reflect)在您的原始暴徒实例上。

要解决此问题,您需要通过方法签名上的引用来传递变量:

void attack (Mob &mobSend, Mob &mobRec){...}

这将确保在该方法中所做的任何更改实际上都会修改传递给该方法的真实生物,而不是它们的临时本地拷贝。

关于c++ - setter 不在类方法内部工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17332049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com