C ++ - неопределенная ссылка на `vtable - PullRequest
6 голосов
/ 01 декабря 2010

Мне было интересно, почему я получаю эту ошибку: неопределенная ссылка на `vtable for BaseRenderer '

Я пытался искать, но не могу понять это. Я пытался избавиться от виртуальной функции, удалить конструктор и т. Д.

My BaseRenderer.h

class BaseRenderer : public Renderer
{
 Q_OBJECT

    public:
        BaseRenderer();
        BaseRenderer(QWidget *parent);
        void paintGL();

        virtual ~BaseRenderer();

 public slots:
  void loadDialog();

 signals:

    protected:
        Mesh loadMesh(string fileName);

    private:

        OBJParser objParser;
        Mesh baseTerrain;

};

My BaseRenderer.cpp

BaseRenderer::BaseRenderer()              <------ Error leads me here
{
}

BaseRenderer::BaseRenderer(QWidget *parent) : Renderer(parent)
{

}

BaseRenderer::~BaseRenderer()
{
    //dtor
}

Как бы я избавился от этой проблемы? Я также слышал, что это может быть компилятор ...? Спасибо за помощь:)

Ответы [ 5 ]

9 голосов
/ 01 декабря 2010

Поскольку Q_OBJECT находится в родительском классе, Renderer, вам не нужно также включать его в BaseRenderer. Просто избавьтесь от Q_OBJECT, и он должен работать:)

2 голосов
/ 01 декабря 2010
1 голос
/ 01 декабря 2010

Я думаю, это та же проблема, что и у меня, когда я задавал этот вопрос: Почему эта компиляция (ссылка) не работает с макросом Q_OBJECT?

Попробуйте перезапустить qmake как paxdiabloи Тобиас предлагает.

1 голос
/ 01 декабря 2010

Убедитесь, что вы реализовали все объявленные методы, особенно слот.Затем убедитесь, что ваш заголовок указан в разделе HEADERS в файле .pro, а затем запустите qmake.

1 голос
/ 01 декабря 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...