这可能是下一个副本,但是我在这段代码中找不到错误:
#include <qwt_plot.h>
class QLinePlot : public QwtPlot
{
Q_OBJECT
public:
QLinePlot(QWidget* parent = 0, Qt::WindowFlags flags = 0): QwtPlot(parent)
{
}
~QLinePlot()
{
}
};
int main( int argc, char **argv )
{
QLinePlot * plot = new QLinePlot();
}
我删除了build文件夹并再次运行了qmake,但没有更改。错误消息是
test.cpp:7: undefined reference to `vtable for QLinePlot'
答案 0 :(得分:3)
您错过了文件末尾的#include "test.moc"
:
// test.cpp
#include <qwt_plot.h>
class QLinePlot : public QwtPlot
{
Q_OBJECT
public:
using QwtPlot::QwtPlot;
};
int main( int argc, char **argv )
{
QLinePlot plot;
}
#include "test.moc"
添加include行后,必须在项目上重新运行qmake。
但你的例子并不是最小的。您需要重现的问题是:
#include <QObject>
class Foo : public QObject {
Q_OBJECT
~Foo() {}
}
int main() { Foo foo; }
答案 1 :(得分:0)
您应该在头文件QLinePlot
中拥有test.h
课程。这更干净,您无需在test.moc
中加入test.cpp
。例如
TEST.CPP
#include "test.h"
int main( int argc, char **argv )
{
QLinePlot plot;
}
test.h
#include <qwt_plot.h>
class QLinePlot : public QwtPlot
{
Q_OBJECT
// stuff
};