我正在尝试使用C ++中的if语句,如果条件成立,我会以一种方式分配变量,否则以另一种方式分配变量。我的代码是:
double mu;
double lambda;
if (u2(RNG) < condition) {
double mu{(y-min)/(x-min)};
double lambda{pow(y-min, 2.0)/(t-s)};
} else {
double mu{(x-min)/(y-min)};
double lambda{pow(x-min, 2.0)/(t-s)};
}
但是,之后mu和lambda不会被更改-我认为这是因为设置变量mu和lambda的语句在块中,因此当它离开该块时,它们将被更改。有谁知道我该怎么做,以便在这段代码之后,更改mu和lambda。
更清楚地说,例如,如果mu和lambda初始化为0,则在if-else语句之后,它们将保持不变,尽管我希望根据我所处的条件对其进行更改。
谢谢
答案 0 :(得分:4)
我不小心重新声明了变量-我的坏。这是正确的:
double mu;
double lambda;
if (u2(RNG) < condition) {
mu = (y-min)/(x-min);
lambda = pow(y-min, 2.0)/(t-s);
} else {
mu =(x-min)/(y-min);
lambda = pow(x-min, 2.0)/(t-s);
}
答案 1 :(得分:3)
您正在隐藏分支内部的外部变量。从分配中删除类型(double
,将其分配给外部变量,而不是声明具有相同名称但作用域更有限的新变量。
您想要这个:
if (u2(RNG) < condition) {
mu = (y-min)/(x-min);
lambda = pow(y-min, 2.0)/(t-s);
} else {
...
答案 2 :(得分:1)
您要重新定义阴影,并因此在每个分支中的阴影 mu
和lambda
。
编译器没有警告您吗?