LINUX.ORG.RU

undefined reference to vtable for...


0

0
#ifndef _WidgetDial_H_
#define _WidgetDial_H_

#include <QtGui>
#include <boost/noncopyable.hpp>

class WidgetDial : public QWidget //, public boost::noncopyable
{		
	Q_OBJECT

	public:
		WidgetDial ( QWidget *_parent );
		virtual ~WidgetDial ( );

	protected:
		virtual void paintEvent ( QPaintEvent * );
};

#endif

---

#include "WidgetDial.h"

WidgetDial :: WidgetDial ( QWidget *_parent )
: QWidget( _parent )
{

}

WidgetDial :: ~WidgetDial ( )
{

}

//
// PROTECTED
//
void WidgetDial::paintEvent ( QPaintEvent *_event )
{

}
gui/WidgetDial.cpp.o: In function `WidgetDial':
gui/WidgetDial.cpp:8: undefined reference to `vtable for WidgetDial'
gui/WidgetDial.cpp:8: undefined reference to `vtable for WidgetDial'
gui/WidgetDial.cpp.o: In function `~WidgetDial':
gui/WidgetDial.cpp:14: undefined reference to `vtable for WidgetDial'
gui/WidgetDial.cpp:14: undefined reference to `vtable for WidgetDial'

Почему так?

★☆

Последнее исправление: kiverattes (всего исправлений: 1)

Солвед! Q_OBJECT воткнул в класс несколько виртуальных функций:

    virtual const QMetaObject *metaObject() const; \
    virtual void *qt_metacast(const char *); \
    QT_TR_FUNCTIONS \
    virtual int qt_metacall(QMetaObject::Call, int, void **); \

а реализацию для них должен генерить moc, который я не запустил, а без реализации виртуальных функций gcc страдает фигнёй из первого топика.

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

который я не запустил

ничего не надо запускать. Если раньше в классе не было Q_OBJECT, а потом ты его добавил, то нужно запустить qmake и он создаст в Makefile нужные правила для вызова moc.

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

Цитирую себя же: «Для документирования кода». Или вопрос именно в причине выбора boost::noncopiable в проекте, использующем Qt? Лично я не люблю Qt'шные макросы (как и макросы вообще), ТС возможно придерживается такой же точки зрения.

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

Да я же выделил болдом, то что мне действительно интересно, почему public наследование от noncopyable? в чем смысл?

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

Ух, а вот это вот я просмотрел, несмотря на bold )
Попробую телепатию: скорее всего ошибка автора, из-за которой он подумал, что noncopyable не работает, закомментировал его и применил Q_DISABLE_COPY.

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

Да сработает noncopyable нормально при любом типе наследования т.к. любой тип наследования не повышает прав доступа и приватные конструкторы копирования и присваивания в noncopyable никак не станут публичными. Тут вопрос в том что публично наследоваться от noncopyable идеологически не правильно т.к. теперь унаследованный класс можно свободно передать в что-то типа void test(const boost::noncopyable&), что в купе с отсутствием у noncopyable виртуального деструктора может привести к нежелательным последствиям. На практике так делать конечно никто не станет, короче говоря, это все вопрос стиля и понимания языка.

p.s. Боязнь макросов в Qt - это параноя, не пишите тогда Q_OBJECT.

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