This question already has answers here:
Qt Linker Error: “undefined reference to vtable” [duplicate]

(9个答案)


7年前关闭。




我在Windows 7 Ultimate 32位上使用Qt Creator 2.0.1和Qt 4.7.0(32位)。

考虑以下代码,该代码是产生该错误的最低要求:
class T : public QObject, public QGraphicsItem
{
    Q_OBJECT

public:
    T() {}

    QRectF      boundingRect() const {return QRectF();}
    void        paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
                      QWidget *widget) {}
};

int main()
{
    T t;
    return 0;
}

上面的代码片段导致以下链接器错误:



如果我注释掉包含Q_OBJECT的行,则可以正常编译。我需要带QGraphicsItem的信号和插槽,所以我需要Q_OBJECT

代码有什么问题?谢谢。

最佳答案

这是因为MOC生成的单位未包含在链接过程中。也许根本没有生成。我要做的第一件事是将类声明放在单独的头文件中,也许构建系统没有在扫描实现文件。

另一种可能性是,所讨论的类曾经不属于Qt元对象系统(也就是说,它没有Q_OBJECT或根本没有继承自QObject),因此需要再次运行qmake来创建该类。 MOC的必要规则。强制运行qmake的最简单方法是对项目文件进行一些微不足道的更改以更新其时间戳,例如添加然后删除一些空白。或者,如果您使用的是Qt Creator,则只需从项目上下文菜单中选择“运行qmake”即可。

关于c++ - Q_OBJECT引发 'undefined reference to vtable'错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4774291/

10-11 22:24
查看更多