C++ 类对象未正确修改其他类对象

C++ 类对象未正确修改其他类对象,c++,class,C++,Class,我正在尝试创建一个模型类,该类执行以下操作: -创建网格类实例 -调用所创建网格对象的addVertex函数 -调用所创建网格对象的addTriangle函数 Mesh类有两个向量,函数添加到其中,但当我在main.cpp中打印内容时,它们是空的 这是我的密码: 模型类: class Model { public: /* Model Data */ /... //using default constructor Mesh createMesh() {

我正在尝试创建一个模型类,该类执行以下操作: -创建网格类实例 -调用所创建网格对象的addVertex函数 -调用所创建网格对象的addTriangle函数

Mesh类有两个向量,函数添加到其中,但当我在main.cpp中打印内容时,它们是空的

这是我的密码:

模型类:

class Model 
{
public:
    /*  Model Data */
    /...

    //using default constructor

    Mesh createMesh() {
        Mesh mesh;
        meshes.push_back(mesh);
        return mesh;
    }

    void addVertex(Mesh mesh, Vertex v) {
        mesh.addVertex(v);
    }
    void addTriangle(Mesh mesh, Vertex a, Vertex b, Vertex c) {
        mesh.addTriangle(a,b,c);
    }
/...

网格类别:

class Mesh {
public:
    /*  Mesh Data  */
    vector<Vertex> vertices;
    vector<unsigned int> indices;
    /...
// constructor
    Mesh(vector<Vertex> vertices, vector<unsigned int> indices, vector<Texture> textures)
    {
        this->vertices = vertices;
        this->indices = indices;
        this->textures = textures;
        for (Vertex v: vertices) {
            pairings.insert( std::pair<Vertex,unsigned int>(v,count) );
            count++;
        }
        setupMesh();
    }
    Mesh () {

    }

    //function 1
    void addVertex(Vertex vertex) {
        vertices.push_back(vertex);
        pairings.insert( std::pair<Vertex,unsigned int>(vertex,count));
        count++;
    }

    //function 2
    void addTriangle(Vertex a, Vertex b, Vertex c) { 
        unsigned int index = pairings[a];
        indices.push_back(index);
        index = pairings[b];
        indices.push_back(index);
        index = pairings[c];
        indices.push_back(index);
        setupMesh();
    }

类网格{
公众:
/*网格数据*/
向量顶点;
向量指数;
/...
//建造师
网格(向量顶点、向量索引、向量纹理)
{
这->顶点=顶点;
这->索引=索引;
这->纹理=纹理;
对于(顶点v:顶点){
pairings.insert(std::pair(v,count));
计数++;
}
setupMesh();
}
网格(){
}
//职能1
void addVertex(顶点){
顶点。向后推(顶点);
insert(std::pair(顶点,计数));
计数++;
}
//职能2
void addTriangle(顶点a、顶点b、顶点c){
无符号整数索引=成对[a];
指数。向后推(指数);
索引=配对[b];
指数。向后推(指数);
索引=配对[c];
指数。向后推(指数);
setupMesh();
}
main.cpp:

Model m;
    Mesh mesh = m.createMesh();
    Vertex a;
    a.Position = glm::vec3 (-1,0,0);
    m.addVertex(mesh, a);
    Vertex b;
    b.Position = glm::vec3 (0,1,0);
    m.addVertex(mesh,b);
    Vertex c;
    c.Position = glm::vec3 (1,0,0);
    m.addVertex(mesh,c);
    m.addTriangle(mesh,a,b,c);
    std::cout << mesh.indices.size(); //prints 0


m型;
网格网格=m.createMesh();
顶点a;
a、 位置=glm::vec3(-1,0,0);
m、 addVertex(网格,a);
顶点b;
b、 位置=glm::vec3(0,1,0);
m、 添加顶点(网格,b);
顶点c;
c、 位置=glm::vec3(1,0,0);
m、 addVertex(mesh,c);
m、 添加三角形(网格,a,b,c);

std::cout我相信这是因为在模型类中的
addVertex
addTriangle
方法上,您是通过值传递参数,而不是通过引用或指针。这意味着当您调用该方法时,您将传递
网格
顶点
对象的副本以及您在方法执行完成后,该方法将立即丢失。请尝试以下更改:

void addVertex(Mesh &mesh, Vertex &v) {
    mesh.addVertex(v);
}
void addTriangle(Mesh &mesh, Vertex &a, Vertex &b, Vertex &c) {
    mesh.addTriangle(a,b,c);
}
有关通过引用传递的更多信息,请参阅