C++ Qt:push_back 无法正常工作
C++ Qt : push_back doesn't work correctly
我正在尝试编写一个代码来读取 .stl 文件,并在 std::vector 三角形中收集信息。
当我使用 push_back 时,它会删除三角形中所有先前的值,并将所有这些值替换为我尝试 push_back.
的最后一个值
这是我的代码:
Mesh.h: struct Triangle {
Node* nodes[3];
double normal[3]; };
struct Node {
double coo[3]; };
public:
std::vector<Triangle*> triangles;
Mesh.cpp void dm::Mesh::loadSTL(const QString p_file) //----------------------------------------------------------------------------- {
//Open the STL file
QFile file(p_file);
//READ FILE
file.open(QIODevice::ReadOnly | QIODevice::Text);
Node *vn = new Node;
Node *vertex1 = new Node;
Node *vertex2 = new Node;
Node *vertex3 = new Node;
Triangle *triangle = new Triangle;
*triangle->nodes = new Node;
QString line;
QTextStream in(&file);
line = in.readLine(); // solid
while(true)
{
line = in.readLine().trimmed(); //facet or endsolid
if(line.trimmed().startsWith("endsolid"))
{
break;
}
*vn = getCoordinateFromString(line);
line = in.readLine(); //outer loop
line = in.readLine().trimmed(); //vertex 1
*vertex1 = getCoordinateFromString(line);
line = in.readLine().trimmed(); //vertex 2
*vertex2 = getCoordinateFromString(line);
line = in.readLine().trimmed(); //vertex 3
*vertex3 = getCoordinateFromString(line);
line = in.readLine(); //endloop
line = in.readLine(); //endfacet
triangle->nodes[0] = vertex1;
triangle->nodes[1] = vertex2;
triangle->nodes[2] = vertex3;
for(int i = 0; i<3 ; i++){
triangle->normal[i] = vn->coo[i];
}
triangles.push_back(triangle);
}
file.close();
}
问题是您创建了一次三角形并不断将指向该三角形的指针推入向量中。这意味着对指针的任何更改都会影响向量中的所有项目(因为它们都指向同一个实例)。
你应该在 while 循环中移动三角形的构造 (Triangle *triangle = new Triangle;
)
这确保您每次都创建一个新指针。
我正在尝试编写一个代码来读取 .stl 文件,并在 std::vector
这是我的代码:
Mesh.h: struct Triangle {
Node* nodes[3];
double normal[3]; };
struct Node {
double coo[3]; };
public:
std::vector<Triangle*> triangles;
Mesh.cpp void dm::Mesh::loadSTL(const QString p_file) //----------------------------------------------------------------------------- {
//Open the STL file
QFile file(p_file);
//READ FILE
file.open(QIODevice::ReadOnly | QIODevice::Text);
Node *vn = new Node;
Node *vertex1 = new Node;
Node *vertex2 = new Node;
Node *vertex3 = new Node;
Triangle *triangle = new Triangle;
*triangle->nodes = new Node;
QString line;
QTextStream in(&file);
line = in.readLine(); // solid
while(true)
{
line = in.readLine().trimmed(); //facet or endsolid
if(line.trimmed().startsWith("endsolid"))
{
break;
}
*vn = getCoordinateFromString(line);
line = in.readLine(); //outer loop
line = in.readLine().trimmed(); //vertex 1
*vertex1 = getCoordinateFromString(line);
line = in.readLine().trimmed(); //vertex 2
*vertex2 = getCoordinateFromString(line);
line = in.readLine().trimmed(); //vertex 3
*vertex3 = getCoordinateFromString(line);
line = in.readLine(); //endloop
line = in.readLine(); //endfacet
triangle->nodes[0] = vertex1;
triangle->nodes[1] = vertex2;
triangle->nodes[2] = vertex3;
for(int i = 0; i<3 ; i++){
triangle->normal[i] = vn->coo[i];
}
triangles.push_back(triangle);
}
file.close();
}
问题是您创建了一次三角形并不断将指向该三角形的指针推入向量中。这意味着对指针的任何更改都会影响向量中的所有项目(因为它们都指向同一个实例)。
你应该在 while 循环中移动三角形的构造 (Triangle *triangle = new Triangle;
)
这确保您每次都创建一个新指针。