C++ 访问向量中的数据会导致EXC_错误访问

C++ 访问向量中的数据会导致EXC_错误访问,c++,objective-c,C++,Objective C,我试图从矢量3f访问/打印数据,这会导致EXC\u BAD\u访问: std::cout << myMesh.faces[1].vertices[1].pos.x; 这是什么意思?我在呼叫范围之外吗?已经有一段时间了,但是当你做回推时,你只是简单地复制顶点数组顶点[]=顶点[]。在ObjMeshFace中需要一个自定义副本。这就是为什么顶点[0]。pos.x有效,而顶点[1]。pos.x无效 你把什么东西推到脸上了吗?看起来它仍然是空的。@AndersK,面中有数据,我用它来渲染O

我试图从矢量3f访问/打印数据,这会导致
EXC\u BAD\u访问

std::cout << myMesh.faces[1].vertices[1].pos.x;

这是什么意思?我在呼叫范围之外吗?

已经有一段时间了,但是当你做回推时,你只是简单地复制顶点数组
顶点[]=顶点[]
。在ObjMeshFace中需要一个自定义副本。这就是为什么
顶点[0]。pos.x
有效,而
顶点[1]。pos.x
无效

你把什么东西推到脸上了吗?看起来它仍然是空的。@AndersK,面中有数据,我用它来渲染OpenGL,一切正常。由于某些原因,我无法以这种方式访问它。让我们看看所有的代码-一个最小的可编译示例是最好的-因为我们看不到您如何调用对象以及它们是如何设置的+如前所述,请标记有用的代码,因为Xcode通常是客观的C@Mark,我添加了更多的代码来显示如何填充数据。正如在AndersK的另一条评论中提到的,这是我用于渲染目的的函数代码。@请注意,在
struct ObjMesh
中,当您对向量进行推回操作时,您将在该向量上放置对象的副本。Vector2f、Vector3f都可以很好地复制,因为它们是由简单的对象组成的,但是在C/C++中,不能简单地说a[]=b[]来复制数组。如果你说a[]=b[],你只是在复制指针。因此,要将整个ObjMeshFace对象推回,您可以添加一个CopyConstructor(方法),推回将自动调用,从那里您可以逐个索引复制数组索引。这更有意义。由于它的工作代码,我不想搞砸任何事情,有没有办法做一个变通?因为有一个问题,你必须改变一些东西。这真的很简单。在
struct ObjMeshFace
中,只需添加
ObjMeshFace(const ObjMeshFace&o){for int i=0;i<3;++i)顶点[i]=o.vertices[i];}
我想不出多少。代码缺少一些括号,因此我将其更正为
ObjMeshFace(const ObjMeshFace&o){for(int i=0;i<3;++i)顶点[i]=o.vertices[i];}/code>,这不起作用。。由于<代码>没有匹配的构造函数来初始化“ObjMeHeFACE”< /代码>我的道歉,当你这样做时,C++也需要添加一个默认构造函数;创建对象时调用的方法。在这里,您可以初始化数组,或者您可能只想添加以下伪造的默认构造函数
ObjMeshFace(){}
struct Vector2f{
    float x, y;
};
struct Vector3f{
    float x, y, z;
};

struct ObjMeshVertex{
    Vector3f pos;
    Vector2f texcoord;
    Vector3f normal;
};

struct ObjMeshFace{
    ObjMeshVertex vertices[3];
    ObjMeshFace(){}
    ObjMeshFace(const ObjMeshFace& o)
    {for (int i=0; i < 3; ++i) vertices[i] = o.vertices[i]; }
};

struct ObjMesh{
    std::vector<ObjMeshFace> faces;
};

ObjMesh myMesh;

for(size_t i = 0; i < faces.size(); ++i){
    ObjMeshFace face;
    for(size_t j = 0; j < 3; ++j){
        face.vertices[j].pos        = positions[(faces[i].pos_index[j] - 1)];
        face.vertices[j].texcoord   = texcoords[faces[i].tex_index[j] - 1];
        face.vertices[j].normal     = normals[faces[i].nor_index[j] - 1];
    }
    myMesh.faces.push_back(face);
}
  reference
  operator[](size_type __n)
  { return *(this->_M_impl._M_start + __n); }