«Внутренняя ошибка: pc 0x0 в readm в psymtab, но не в symtab.» Ошибка в QT при попытке реализовать простой MVC

0

Я пытаюсь реализовать простой MVC в QT. Цель состоит в том, чтобы иметь один виджет рендеринга, модель и контроллер. Контроллер будет абстрактным базовым классом с методом "рендеринга", поэтому каждый контроллер знает, как рисовать его модель, чтобы что-то рисовать. Я создал очень простой пример того, что я пытаюсь выполнить, но при отладке сразу появляется следующая ошибка:

Внутренняя ошибка: pc 0x0 в read в psymtab, но не в symtab.

Я убрал столько, сколько мог, чтобы воспроизвести ошибку. Несмотря на то, что код запускается и выходит с тем, что показано ниже, попытка создания RenderWidget приведет к нескольким ошибкам, включая сбой сегментации (в режиме отладки).

Любая помощь будет оценена по достоинству. Я включил минимальный код, необходимый для воспроизведения этой ошибки ниже. Это было сделано в пустом проекте QT Widget без форм.

Обновление 1

Я потратил еще немного времени на борьбу с этой ошибкой, и я сузил ее дальше. Я еще больше подрезал код и переместил его в один файл Main.cpp, согласно предложению Митча. Ошибка появляется, если вы поместите контрольную точку в метод Main и перейдите в конструктор MainWindow.

main.cpp

#include <QApplication>
#include <QWidget>
#include <QMainWindow>

class RenderWidget : public QWidget
{
    Q_OBJECT
public:
    explicit RenderWidget(QWidget *parent = 0);
};

RenderWidget::RenderWidget(QWidget *parent) :
    QWidget(parent)
{
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

private:
    RenderWidget* m_renderArea;
};

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    m_renderArea = new RenderWidget(this);
}

MainWindow::~MainWindow()
{

}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

#include "main.moc"
  • 0
    Это много файлов ... можно иметь пример Qt C ++, который содержится в одном файле main.cpp, если вы просто добавите #include "main.moc" внизу файла. Это сделало бы других пользователей гораздо более склонными опробовать ваш код.
Теги:
model-view-controller
qt

2 ответа

1

Похоже, проблема была либо ошибкой с версией QT, которую я установил, либо с отладчиком, который я использовал. Проблема возникла, даже если я создал новый проект. После установки QT 5.3 и получения самой новой версии средств отладки для Windows ошибка, похоже, исчезла.

0

Вы должны удалить или реализовать свой конструктор в контроллере:

//Controller();

или

Controller() {}

Кроме того, в ControllerA вы также должны вызвать базовый класс:

ControllerA::ControllerA()
   : Controller()
{
}

Наконец, ui_renderArea не инициализируется.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню