Программа на c++ аварийно завершается в Qt Creator

Пытаюсь написать программу на c++ в Qt Creator, которая бы читала простой *.obj файл. Вроде всё должно работать, но получаю следующий вывод приложения:

Starting C:...\build-client-3d-Desktop_x86_windows_msys_pe_64bit-Debug\debug\client-3d.exe...

C:...\build-client-3d-Desktop_x86_windows_msys_pe_64bit-Debug\debug\client-3d.exe аварийно завершился.

modelloader.cpp:

#include "modelloader.h"
#include <fstream>
#include <sstream>
#include <stdexcept>
#include <QDebug>

ModelLoader::ModelLoader() {}

void ModelLoader::readFromObjFile(const QString& filename) {
    std::ifstream objFile(filename.toStdString());
    std::string line;

    if (!objFile.is_open()) {
        throw std::runtime_error("Cannot open the file: " + filename.toStdString());
    }

    while (getline(objFile, line)) {
        std::istringstream lineStream(line);
        std::string type;
        lineStream >> type;

        if (type == "v") {
            double x, y, z;
            lineStream >> x >> y >> z;
            nodes.push_back(std::make_shared<node>(x, y, z));
        } else if (type == "f") {
            int idx1, idx2, idx3;
            lineStream >> idx1 >> idx2 >> idx3;

            // Используем get() для получения обычных указателей из shared_ptr для передачи в конструктор triangle
            triangles.push_back(std::make_shared<triangle>(true, nodes[idx1 - 1].get(), nodes[idx2 - 1].get(), nodes[idx3 - 1].get()));
        }
    }

    objFile.close();
}

modelloader.h:

#ifndef MODELLOADER_H
#define MODELLOADER_H

#include "Node.h"
#include "Triangle.h"
#include <vector>
#include <QString>

class ModelLoader
{
public:
    ModelLoader();
    void readFromObjFile(const QString& filename);

private:
    std::vector<std::shared_ptr<node>> nodes;
    std::vector<std::shared_ptr<triangle>> triangles;
};

#endif // MODELLOADER_H

mainwindow.cpp:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "modelloader.h"
#include <QDebug>
#include <QMessageBox>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    try {
        // Создаем экземпляр загрузчика моделей
        ModelLoader loader;

        // Попытка загрузить модель
        loader.readFromObjFile("./simple_triangle.obj");
    } catch (const std::runtime_error& e) {
        qDebug() << "Error loading model: " << e.what();
        QMessageBox::critical(this, "Loading error", "Could not load the model: " + QString(e.what()));
    }
}

MainWindow::~MainWindow()
{
    delete ui;
}

mainwindow.h:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

.obj файл:

v 0.0 0.0 0.0
v 1.0 0.0 0.0
v 0.0 1.0 0.0
f 1 2 3

Ответы (0 шт):