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`