I am a beginner to Qt programming and use codeblocks for my programming. I created 3 files communicate.h,commmunicate.cpp and main.cpp as follows:
communicate.h
#ifndef COMMUNICATE_H #define COMMUNICATE_H #include <QWidget> #include <QApplication> #include <QPushButton> #include <QLabel> class Communicate : public QWidget { Q_OBJECT public: Communicate(QWidget *parent = 0); private slots: void OnPlus(); void OnMinus(); private: QLabel *label; }; #endif
communicate.cpp
#include "communicate.h" Communicate::Communicate(QWidget *parent) : QWidget(parent) { QPushButton *plus = new QPushButton("+", this); plus->setGeometry(50, 40, 75, 30); QPushButton *minus = new QPushButton("-", this); minus->setGeometry(50, 100, 75, 30); label = new QLabel("0", this); label->setGeometry(190, 80, 20, 30); connect(plus, SIGNAL(clicked()), this, SLOT(OnPlus())); connect(minus, SIGNAL(clicked()), this, SLOT(OnMinus())); } void Communicate::OnPlus() { int val = label->text().toInt(); val++; label->setText(QString::number(val)); } void Communicate::OnMinus() { int val = label->text().toInt(); val--; label->setText(QString::number(val)); }
main.cpp
#include "communicate.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); Communicate window; window.setWindowTitle("Communicate"); window.show(); return app.exec(); }
and its showing errors as follows:
obj\Debug\main.o(.text$_ZN11CommunicateD1Ev[Communicate::~Communicate()]+0xb)||In function `ZN7QStringC1EPKc':| C:\Qt\4.4.3\include\QtCore\..\..\src\corelib\arch\qatomic_windows.h||undefined reference to `vtable for Communicate'| obj\Debug\main.o(.text$_ZN11CommunicateD1Ev[Communicate::~Communicate()]+0x17):C:\Qt\4.4.3\include\QtCore\..\..\src\corelib\arch\qatomic_windows.h||undefined reference to `vtable for Communicate'| obj\Debug\communicate.o(.text+0x172)||In function `ZN11CommunicateC2EP7QWidget':| E:\Project\cam2\communicate.cpp|5|undefined reference to `vtable for Communicate'| obj\Debug\communicate.o(.text+0x17e):E:\Project\cam2\communicate.cpp|5|undefined reference to `vtable for Communicate'| obj\Debug\communicate.o(.text+0x63a)||In function `ZN11CommunicateC1EP7QWidget':| E:\Project\cam2\communicate.cpp|5|undefined reference to `vtable for Communicate'| obj\Debug\communicate.o(.text+0x646):E:\Project\cam2\communicate.cpp|5|more undefined references to `vtable for Communicate' follow| ||=== Build finished: 6 errors, 0 warnings ===|
guys please help...cant figure it out...
This is a subtle bug (and probably partly at least a compiler bug) that I've seen before. Since QWidget has a virtual destructor, the compiler needs a vtable for your class. But your class doesn't have any virtual functions, so it didn't build one for your Communicate class.
Add a virtual ~Communicate() {};
to your class, and all will be well.
Yes, it took me some time to figure this out too!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With