C++ 类对象未正确修改其他类对象
我正在尝试创建一个模型类,该类执行以下操作: -创建网格类实例 -调用所创建网格对象的addVertex函数 -调用所创建网格对象的addTriangle函数 Mesh类有两个向量,函数添加到其中,但当我在main.cpp中打印内容时,它们是空的 这是我的密码: 模型类:C++ 类对象未正确修改其他类对象,c++,class,C++,Class,我正在尝试创建一个模型类,该类执行以下操作: -创建网格类实例 -调用所创建网格对象的addVertex函数 -调用所创建网格对象的addTriangle函数 Mesh类有两个向量,函数添加到其中,但当我在main.cpp中打印内容时,它们是空的 这是我的密码: 模型类: class Model { public: /* Model Data */ /... //using default constructor Mesh createMesh() {
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);
}
有关通过引用传递的更多信息,请参阅