我制作了一个c ++程序,其中有
部分Point originzarm = normalizevector(camera.origin.x, camera.origin.y, camera.origin.z);
if (camera.origin.x == 0 and camera.origin.y == 0) {
Point originxarm(1,0,0);
}
else{
Point originxarm = normalizevector(camera.origin.y, -camera.origin.x, 0);
}
Point originyarm = crossproduct(originxarm.x, originxarm.y, originxarm.z, originzarm.x, originzarm.y, originzarm.z);
函数交叉乘积并规范化矢量返回点。 在else部分,有关于未使用的变量originxarm的警告。但是当我在定义originyarm时尝试使用originxarm时,它表示使用未声明的标识符originxarm。如何在if else语句之后使originxarm可见并将其设置在大括号内?
很久以前,当我刚开始理解C ++时,我问过这个问题。答案 0 :(得分:3)
问题是变量originxarm
的生命周期范围。只要相应的else没有关闭,你声明第一个只有你的if子句没有关闭才生存,第二个就生效。但是在你的程序不知道if-else-clause originxarm
之后。因此,您将收到“未声明的标识符”错误。
if子句既不使用你的变量也不使用你的else子句,因此你得到“未使用的变量”警告。
您必须修改代码:
Point originxarm;
Point originzarm = normalizevector(camera.origin.x, camera.origin.y, camera.origin.z);
if (camera.origin.x == 0 and camera.origin.y == 0) {
originxarm = Point(1,0,0);
}
else{
originxarm = normalizevector(camera.origin.y, -camera.origin.x, 0);
}
Point originyarm = crossproduct(originxarm.x, originxarm.y, originxarm.z, originzarm.x, originzarm.y, originzarm.z);
答案 1 :(得分:2)
originxarm
。它们的定义是由花括号引入的范围的局部。这是正确的,也是语言的基本概念。