C ++,尝试编写对象读取器,尝试从一个向量中获取数据时出错

时间:2016-03-09 20:17:02

标签: c++ vector vertices outofrangeexception face

我正在尝试编写一个非常简单的obj文件阅读器,它将所有顶点值从obj文件按顺序写入一个向量(已经完成),并且还将obj文件中面值引用的顶点值写入另一个向量中矢量,例如:

v1 = 0.0 0.0 0.0

v2 = 1.0 0.0 0.0

v3 = 1.0 1.0 0.0

f1 = 3 2 1

我的程序会在第一个向量中按顺序写入所有顶点值 然后在第二个向量中编写构成一个面的顶点值,如下所示: 1.0 1.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0

一切正常,直到我试图从第一个矢量(verticesCoordsXYZ)获取值并将它们推回到第二个矢量(faceCoords)。我注释掉的代码打破了程序,似乎我在第一个向量中搜索的位置大于向量大小(当程序中断时我在内存loc错误时得到out_of_range,并且它表示verticesCoordsXYZ的大小是0),即使我用向量填充所有顶点值。

我做错了什么?我不理解向量是如何工作的,我是否会离开向量范围?我该如何解决这个问题?

   node     langs   lfreq
0     1      [it]     [1]
1     2      [en]     [1]
2     3  [ar, es]  [2, 1]
3     5  [uz, es]  [1, 1]

2 个答案:

答案 0 :(得分:1)

您每次通过while循环重新创建向量,因为它们已在其中声明。这意味着当s == "f"时它们都是空的。

您应该在声明while的{​​{1}}循环之外声明它们。

答案 1 :(得分:0)

你在while循环中声明了vector,这样每次while循环时它都会被重置。

尝试在while循环之前声明向量