Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在C++;_C++_Variables - Fatal编程技术网

C++ 如何在C++;

C++ 如何在C++;,c++,variables,C++,Variables,我在if语句中声明了一个对象,我需要在另一个if语句中访问它。对象接受6个整数和1个浮点作为其参数 if(mode == 1){ Enemy ene(10 + enLi, 10 + enLi, 0, 0, enL, 1, 0.8); Enemy dashF(40, 40, 10, 10, 11, 1, 1.6); //I need to use these 2 objects... }else if(mode ==

我在
if
语句中声明了一个对象,我需要在另一个
if
语句中访问它。对象接受6个整数和1个浮点作为其参数

        if(mode == 1){
            Enemy ene(10 + enLi, 10 + enLi, 0, 0, enL, 1, 0.8);
            Enemy dashF(40, 40, 10, 10, 11, 1, 1.6); //I need to use these 2 objects...
        }else if(mode == 2){
            Enemy ene(18 + enLi, 18 + enLi, 0, 0, enL, 1, 1);
            Enemy dashF(52, 52, 10, 10, 12, 3, 2);
        }else if(mode == 3){
            Enemy ene(24 + enLi, 24 + enLi, 0, 0, enL, 1, 1.2);
            Enemy dashF(65, 65, 10, 10, 13, 3, 2.3);
        }else if(mode == 4){
            Enemy ene(28 + enLi, 28 + enLi, 0, 0, enL, 1, 1.4);
            Enemy dashF(80, 80, 10, 10, 14, 4, 2.8);
        }
        if(en == 1){
            battle(ene, "Wolf", false); // down here.
            start = false;
            koltForest();
            return;
        }else if(en == 2){
            battle(ene, "Bear", false);
            start = false;
            koltForest();
            return;
        }else if(en == 4){
            battle(dashF, "Dashing Falcon", true);
            return;
        }else{
            battle(ene, "Forest Rat", false);
            start = false;
            koltForest();
            return;
        }

如果具有默认构造函数,则可以在
之前声明对象,如果定义了有效的赋值运算符,则可以覆盖每个分支中的值

Enemy ene;
if (mode == 1) {
    ene = Enemy( /* ... */ );
}
这假设构造和拷贝分配是便宜的

如果不是这样,或者您不想定义默认构造函数,则需要使用指针或智能指针(如
std::unique_ptr
)来保存对象

std::unique_ptr<Enemy> ene;
if (mode == 1) {
    ene.reset(new Enemy( /* ... */ ));
}

只是大声要求重构。至少,
模式
应该是某种类型的
枚举
,并使用符号名。如果您将
模式
设为自定义类,它可能会有一个
getDebuy
方法,该方法返回一个具有正确构造函数参数的对象。

在前几个条件中,将数字存储在变量中,而不是将从数字构造的
Debuy
对象

然后在条件之外,从这些变量构造
敌人
对象

int x;
switch (a) {
   case 0: x = 42;  break;
   case 1: x = 98;  break;
   case 2: x = 115; break;
   // ...
   default: throw std::runtime_error("Unexpected value for `a`");
}

Type obj(x);
// Now use `obj`

尝试在
if
语句之外声明它。
int x;
switch (a) {
   case 0: x = 42;  break;
   case 1: x = 98;  break;
   case 2: x = 115; break;
   // ...
   default: throw std::runtime_error("Unexpected value for `a`");
}

Type obj(x);
// Now use `obj`