Вот такая ошибка появляется когда компилисуется программа на Qt
причем если класс описай без директивы Q_OBJECT все компилируется отлично! но стоит только ее добавить ... вот такая ошибка но почему???
[max@localhost gui1]$ make g++ -c -pipe -Wall -W -pipe -Wall -O2 -fexpensive-optimizations -march=i586 -mcpu=i686 -DGLX_GLXEXT_LEGACY -fno-use-cxa-atexit -fno-exceptions -DQT_NO_DEBUG -I/usr/lib/qt3//mkspecs/default -I. -I/usr/lib/qt3//include -I.ui/ -I.moc/ -o .obj/main.o main.cpp g++ -o app .obj/main.o .obj/mainform.o .obj/moc_mainform.o -L/usr/lib/qt3//lib -L/usr/X11R6/lib -lqt-mt -lXext -lX11 -lm .obj/main.o: In function `mDraw::mDraw[not-in-charge](QWidget*, char const*)': .obj/main.o(.text+0x32): undefined reference to `vtable for mDraw' .obj/main.o(.text+0x38): undefined reference to `vtable for mDraw' .obj/main.o: In function `mDraw::mDraw[in-charge](QWidget*, char const*)': .obj/main.o(.text+0x82): undefined reference to `vtable for mDraw' .obj/main.o(.text+0x88): undefined reference to `vtable for mDraw' .obj/main.o: In function `mDraw::~mDraw [not-in-charge]()': .obj/main.o(.text+0xb1): undefined reference to `vtable for mDraw' .obj/main.o(.text+0xb8): more undefined references to `vtable for mDraw' follow collect2: ld returned 1 exit status make: *** [app] Ошибка 1 [max@localhost gui1]$
Сам класс выглядит так :
class mDraw : public QWidget { Q_OBJECT public: mDraw(QWidget *parent, const char *name); ~mDraw(); public slots: void DrawOs(); protected: void paintEvent( QPaintEvent * ); private: QPoint *points; };
mDraw::mDraw( QWidget *parent, const char *name ) : QWidget(parent, name) { setBackgroundColor( white ); }
mDraw::~mDraw() { delete[] points; }
void mDraw::paintEvent( QPaintEvent * ) { QPainter paint(this); paint.drawLine(10,10,300,300); }
void mDraw::DrawOs() { QPainter paint(this); paint.drawLine(30,30,300,300); update(); }
а объект от класс создается так :
#include <qapplication.h> #include <qframe.h> #include "mainform.h" #include "mdraw.h"
QFrame *MainFrame; mDraw *MainDraw;
int main( int argc, char ** argv ) { QApplication a( argc, argv ); MainForm w; MainFrame = new QFrame(&w, "MainFrame" ); MainFrame->setGeometry(QRect(4, 7, 466, 451)); MainFrame->setFrameShape(QFrame::Box); MainDraw = new mDraw(&w,"MainDraw"); MainDraw->setGeometry(QRect(5, 8, 464, 449)); a.connect(&w, SIGNAL(osButton_click()), MainDraw, SLOT(MainDraw->DrawOs())); w.show(); a.connect( &a, SIGNAL( lastWindowClosed() ), &a, SLOT( quit() ) ); return a.exec(); }