LINUX.ORG.RU

[Qt] Создание класса на основе QWidget

 


0

1

Доброго времени суток ЛОР. Пытаюсь создать класс на базе QWidget:

class Square : public QWidget
{
    Q_OBJECT

    public:
        Square(QWidget *parent = 0);
};

Вся проблема в конструкторе. В Square.cpp:

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

Компиялтор выдает ошибки: error: undefined reference to `vtable for Square' и :: error: collect2: ld returned 1 exit status

Откуда тут вобще vtable? Как исправить?

Спасибо


Это известная проблема. Глупый qmake не перепроверяет для каких файлов нужно собрать мета-информацию (что скрыта под Q_OBJECT). Нужно явно вызвать qmake перед make. Или может вы самописным Makefile'ом воспользовались. Если только начинаете знакомиться с Qt - рекомендую собирать свои программы с помощью CMake.

Dendy ★★★★★
()

А что в файле pro? Хэдеры все указал?

Pina
()

уже давно не сталкивался с такой ошибкой, но она мне встречалась... как уже писали выше решалось все при помощи очистки проекта(Qt Creator) и сборкой снова. Потом как-то обновил и qt и qt creator больше ошибка мне не встречалась

frozenix ★★★
()
Ответ на: комментарий от frozenix

Потом как-то обновил и qt и qt creator больше ошибка мне не встречалась

Вам везёт на минном поле qmake. Пока не перешёл на CMake успел накушаться таких ошибок. Вот тривиальный пример:

#pragma once

#include <QWidget>

class MyWidget : public QWidget
{
};

Конфигурируем: qmake.
Компилируем: make.
Всё нормально. Добавляем Q_OBJECT:

#pragma once

#include <QWidget>

class MyWidget : public QWidget
{
    Q_OBJECT
};

Компилируем: make.
Получаем опаньки.

Dendy ★★★★★
()
Ответ на: комментарий от note173

Сам часто на эту херь нарывался, иногда только make distclean спасал

Gorthauer ★★★★★
()
Ответ на: комментарий от Dendy

хм, похоже я всегда привык писать Q_OBJECT в обьявлении класса, по этому и не сталкивался. кстати очистка проекта не помогает(Qt Creator), так что прошу прощения за пустословие...

frozenix ★★★
()
Ответ на: комментарий от Dendy

Удалил Makefiles и все заработало.

Qt - рекомендую собирать свои программы с помощью CMake

Да сразу сначала думал его использовать, но проект мальнький решил не усложнять.

Всем спасибо за советы и за помощь.

shk
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.