0

我正在尝试在三角形类的三个对象上设置第二个和第三个角的值。如果显式完成,则如下所示:

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]);

行得通!打印这些三角形,我得到(nb 第一个角已经设置 - 这不是问题):

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);
}

*nb 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; }
4

2 回答 2

5

你的问题是:

void set_vector_point1(SurfaceVector vector_point) { vector_point1 = &vector_point; }

您指向一个临时的(vector_point一旦函数调用完成就不再存在)。更改它以便正确复制SurfaceVector

于 2012-03-20T13:03:54.383 回答
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];
于 2012-03-20T13:20:25.290 回答