首页 > 解决方案 > 如何在 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 中传递更改的值???

标签: c++oop

解决方案


小例子来说明你的问题:

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

推荐阅读