Есть пример кода из книги Шлее о Qt 5.3. Он разбросан на хедер
Progress.h, где лежит определение класса Progress,
Progress.cpp, где лежат определения методов этого класса, и основной файл
main.cpp. Я закинул все в один файл main.cpp.
// Как бы файл Progress.h
#include <QApplication>
#include <QtWidgets>
#include <QProgressBar>
#include <QPushButton>
// ======================================================================
class Progress : public QWidget {
Q_OBJECT
private:
QProgressBar* m_pprb;
int m_nStep;
public:
Progress(QWidget* pobj = 0);
public slots:
void slotStep ();
void slotReset();
};
// ----------------------------------------------------------------------
Progress::Progress(QWidget* pwgt/*= 0*/)
: QWidget(pwgt)
, m_nStep(0)
{
m_pprb = new QProgressBar;
m_pprb->setRange(0, 5);
m_pprb->setMinimumWidth(200);
m_pprb->setAlignment(Qt::AlignCenter);
QPushButton* pcmdStep = new QPushButton("&Step");
QPushButton* pcmdReset = new QPushButton("&Reset");
QObject::connect(pcmdStep, SIGNAL(clicked()), SLOT(slotStep()));
QObject::connect(pcmdReset, SIGNAL(clicked()), SLOT(slotReset()));
//Layout setup
QHBoxLayout* phbxLayout = new QHBoxLayout;
phbxLayout->addWidget(m_pprb);
phbxLayout->addWidget(pcmdStep);
phbxLayout->addWidget(pcmdReset);
setLayout(phbxLayout);
}
// Как бы файл Progress.cpp
// ----------------------------------------------------------------------
void Progress::slotStep()
{
m_pprb->setValue(++m_nStep);
}
// ----------------------------------------------------------------------
void Progress::slotReset()
{
m_nStep = 0;
m_pprb->reset();
}
// Как бы файл main()
// ----------------------------------------------------------------------
int main (int argc, char** argv)
{
QApplication app(argc, argv);
Progress progress;
progress.show();
return app.exec();
}
В этом случае файл не компилируется, вылетают ошибки:
main.o: In function `Progress::Progress(QWidget*)':
/mnt/data-disk/MEGA/Programming/C++/build-untitled1-Desktop-Debug/../untitled1/main.cpp:24: undefined reference to `vtable for Progress'
/mnt/data-disk/MEGA/Programming/C++/build-untitled1-Desktop-Debug/../untitled1/main.cpp:24: undefined reference to `vtable for Progress'
main.o: In function `Progress::~Progress()':
/mnt/data-disk/MEGA/Programming/C++/build-untitled1-Desktop-Debug/../untitled1/main.cpp:7: undefined reference to `vtable for Progress'
/mnt/data-disk/MEGA/Programming/C++/build-untitled1-Desktop-Debug/../untitled1/main.cpp:7: undefined reference to `vtable for Progress'
Подскажите пожалуйста, почему так?