我正在尝试在三角形的三个对象上设置第二和第三个角的值。如果明确地完成,这看起来像这样:
triangle_mesh[0].set_vector_point2(vector_anchors[1]);
triangle_mesh[1].set_vector_point3(vector_anchors[1]);
triangle_mesh[1].set_vector_point2(vector_anchors[2]);
triangle_mesh[2].set_vector_point3(vector_anchors[2]);
triangle_mesh[2].set_vector_point2(vector_anchors[3]);
triangle_mesh[0].set_vector_point3(vector_anchors[3]);
此有效!打印这些三角形,我得到(n.b.第一个角落已经设置 - 这不是问题):
triangle0 is ( 0, 0, -1) (1, 0, 0) (-0.5, -0.866025, 0)
triangle1 is ( 0, 0, -1) (-0.5, 0.866025, 0) (1, 0, 0)
triangle2 is ( 0, 0, -1) (-0.5, -0.866025, 0) (-0.5, 0.866025, 0)
首先,这是丑陋的,其次它必须推广到我设置三个以上三角形的情况。我的代码是:
for (int longitude = 0; longitude < num_longitudes; longitude++){
SurfaceVector current_anchor = vector_anchors[1 + longitude];
triangle_mesh[longitude].set_vector_point2(current_anchor);
triangle_mesh[(longitude + 1) % num_longitudes].set_vector_point3(current_anchor);
}
* n.b。 num_longitudes是3 *
我已经检查了一切我能想到的,但现在当我打印出三角形时,我得到了:
triangle0 is ( 0, 0, -1) (-0.5, -0.866025, 0) (-0.5, -0.866025, 0)
triangle1 is ( 0, 0, -1) (-0.5, -0.866025, 0) (-0.5, -0.866025, 0)
triangle2 is ( 0, 0, -1) (-0.5, -0.866025, 0) (-0.5, -0.866025, 0)
有没有人知道会出现什么问题?!
修改 的
三角形上的vector_point变量是指针,设置如下:
void set_vector_point1(SurfaceVector vector_point) { vector_point1 = &vector_point; }
答案 0 :(得分:5)
你的问题存在:
void set_vector_point1(SurfaceVector vector_point) { vector_point1 = &vector_point; }
您指向临时(vector_point
在函数调用完成后不再存在)。更改它以便正确复制SurfaceVector
。
答案 1 :(得分:1)
我改变了:
void set_vector_point1(SurfaceVector vector_point) { vector_point1 = &vector_point; }
到
void set_vector_point1(SurfaceVector& vector_point) { vector_point1 = &vector_point; }
或类似的东西。
在当前版本中,vector_point将是您传递的任何内容的副本,并且在您存储指向不再存在的对象的指针之后将不再存在。
在第二个中,vector_point是对函数外部较长寿命对象的引用。存储指向该指针的指针很好,因为当您使用指针时对象仍然存在。
诀窍是确保对象的寿命超过指向它的所有指针。
<强>此外:强>
在下面的评论中感谢@Nim:
同样在for循环中,该行为:
SurfaceVector current_anchor = vector_anchors[1 + longitude];
这应该也可能是一个参考......目前它也是一个副本。这样你就可以编辑数组中的实际对象,而不是玩弄副本并扔掉它们。所以我会改变这一行:
SurfaceVector& current_anchor = vector_anchors[1 + longitude];