c++ - 如何在 C++ 中重新声明已创建的对象值
问题描述
我有一个任务要创建一个小游戏
构建一个文本冒险游戏,它接受用户输入并执行某些操作。
// 在游戏开始时,用户可以选择一种类型的玩家 (1, 2, 3) // 每种类型的玩家都有以下属性 -
// 玩家 1 - 最大生命值 = 50,伤害 = 10,治疗 = 20
// 玩家 2 - 最大生命值 = 75,伤害 = 25,治疗 = 10
// 玩家 3 - 最大生命值 = 100,伤害 = 75,治疗 = 20
问题是当我尝试重新声明它没有改变的对象时
Player player(0,0,0);
int player_no;
bool gameover=false;
std::cout<<"choose your player !!!";
std::cin>>player_no;
if(player_no==1){
Player player1(50,20,10); //value is not reflected inside while
std::cout<<player.heal; //50
std::cout<<player.health; //20
goto start;
}else if(player_no==2){
Player player(75,10,25); //value is not reflcted inside while
goto start;
}
char command;
start:
while(!gameover){
std::cout<<"what do you want ??? ";
std::cin>>command;
if(command=='D'){
std::cout<<player.health<<"\n"; //uses the default value 0
std::cout<<player.damage<<"\n"; //uses the default value 0
player.TakeDamage(player.damage); //0 is passed
}else if(command=='H') {
player.Heal(player.heal); // 0 is passed
}
如何在 while 中传递更改的值???
解决方案
小例子来说明你的问题:
int a = 2;
if (a == 2)
{
std::cout << "a is " << a << std::endl;
int a = 3;
std::cout << "a set to " << a << std::endl;
}
std::cout << "a is " << a << std::endl;
这打印:
a is 2
a set to 3
a is 2
为什么a
第二行没有3?这是因为大括号{ ... }
声明了一个新范围,而该行声明了一个仅对该范围本地int a = 3
的新变量。a
第二个我们离开 if 范围,第二个a
变量就死了,我们只剩下原始的,它仍然设置为 2。
如果我们将其更改为:
int a = 2;
if (a == 2)
{
std::cout << "a is " << a << std::endl;
a = 3;
std::cout << "a set to " << a << std::endl;
}
std::cout << "a is " << a << std::endl;
然后不a
声明new,赋值引用外部作用域中的变量。现在输出是:
a is 2
a set to 3
a is 3
对您的代码的修复是执行以下操作:
Player player(0, 0, 0);
...
if (player_no == 1) {
player = Player(50, 20, 10);
...
}
推荐阅读
- c# - c# 带有用户验证的控制台应用程序。它应该显示两个菜单:(1)新用户(2)新用户的旧用户:
- azure-devops - Azure DevOps Pipeline 失败,因为密码带有特殊字符
- notepad++ - 如何更改记事本++中的匹配高亮标签,如崇高?
- python - django all-auth 通过 twitch 进行身份验证
- database - Sqlite:内存:可视化器
- javascript - 邮递员 - GUIDS
- javascript - 从 ISO 格式的字符串创建日期
- codeigniter - codeigniter 从 url 替换 2 个或更多控制器的控制器名称
- javascript - 单击按钮前未定义字段时如何处理api数据
- mysql - 获取受帖子类别限制的自定义字段值列表