为什么我在C++开发巫师游戏原型时无法更新类属性?
问题修正方案
以下是代码中存在的4个核心错误及对应修正方法:
- 构造函数赋值方向错误:所有构造函数内的赋值逻辑写反,将形参赋值给类成员的逻辑错写为类成员赋值给形参,全局int类型成员默认初始值为0,因此首次打印所有属性均为0。
错误示例(Wizard构造函数):
修正后:Wizard(int d, int h, int s) { d = damage; h = health; s = stamina; }
Goblin类构造函数按相同逻辑修改即可。Wizard(int d, int h, int s) { damage = d; health = h; stamina = s; } - setter方法赋值方向错误:所有属性的set方法同样写反赋值逻辑,导致调用set方法无法修改类成员属性。
错误示例(setDamage方法):
修正后:void setDamage(int v) { v = damage; }
两个类的所有set方法均按此逻辑修改。void setDamage(int v) { damage = v; } - attack函数参数为值传递:函数形参是实参的副本,修改副本不会作用到原全局实例,需改为引用传递才能修改原对象属性。
错误写法:
修正后:void attack(Wizard attacker, Goblin target)void attack(Wizard& attacker, Goblin& target) - printInfo打印逻辑错误:哥布林的伤害和血量打印时调用的get方法写反,导致属性输出错位。
错误写法:
修正后:std::cout << "Goblin Damage: " << goblin.getHealth() << std::endl; std::cout << "Goblin Health: " << goblin.getDamage() << std::endl;std::cout << "Goblin Damage: " << goblin.getDamage() << std::endl; std::cout << "Goblin Health: " << goblin.getHealth() << std::endl;
完整修正后代码
#include <iostream> class Wizard { public: int damage; int health; int stamina; Wizard(int d, int h, int s) { damage = d; health = h; stamina = s; } float getDamage() { return damage; } void setDamage(int v) { damage = v; } float getHealth() { return health; } void setHealth(int v) { health = v; } float getStamina() { return stamina; } void setStamina(float v) { stamina = v; } }; class Goblin { public: int health; int damage; Goblin(int h, int d) { health = h; damage = d; } float getHealth() { return health; } void setHealth(int v) { health = v; } float getDamage() { return damage; } void setDamage(int v) { damage = v; } }; Wizard wizard(50, 150, 10); Goblin goblin(150, 25); void attack(Wizard& attacker, Goblin& target); void printInfo(); int main() { attack(wizard, goblin); printInfo(); return 0; } void attack(Wizard& attacker, Goblin& target) { if(target.getDamage() > 0.0) { attacker.setStamina(attacker.getStamina() - 1); } } void printInfo() { std::cout << "Wizard Health: " << wizard.getHealth() << std::endl; std::cout << "Wizard Damage: " << wizard.getDamage() << std::endl; std::cout << "Wizard Stamina: " << wizard.getStamina() << std::endl; std::cout << std::endl; std::cout << "Goblin Damage: " << goblin.getDamage() << std::endl; std::cout << "Goblin Health: " << goblin.getHealth() << std::endl; }
修正后运行输出:
Wizard Health: 150 Wizard Damage: 50 Wizard Stamina: 9 Goblin Damage: 25 Goblin Health: 150
内容的提问来源于stack exchange,提问作者Bluegenic
相关产品推荐
相关产品推荐

