首页 >后端开发 >C++ >为什么我的 Qt 应用程序中出现'Q_OBJECT 链接错误:'对 vtable 的未定义引用'”?

为什么我的 Qt 应用程序中出现'Q_OBJECT 链接错误:'对 vtable 的未定义引用'”?

Linda Hamilton
Linda Hamilton原创
2024-10-28 03:51:02354浏览

 Why Am I Getting a

Q_OBJECT 链接错误:'对 vtable 的未定义引用'

考虑以下 Qt 代码片段:

<code class="cpp">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;
}</code>

编译此代码时,您可能会遇到链接器错误,例如:

undefined reference to `vtable for T'
undefined reference to `vtable for T'
...

解决方案:

当 MOC 为您的类生成的单元未包含在链接过程中时,通常会发生此错误。 MOC 单元包含有关该类的元信息,包括其 Q_OBJECT 宏。

可能的原因和修复:

  • 单独的头文件: 确保您的类声明位于单独的头文件中。构建系统可能不会扫描实现文件来定位类声明。
  • MOC 生成: 验证 MOC 单元是否已生成。再次运行 qmake 以强制 qmake 创建必要的 MOC 规则。如果使用 Qt Creator,请从项目上下文菜单中选择“运行 qmake”。
  • Q_OBJECT 宏: 确认您已在类声明中正确使用了 Q_OBJECT 宏。它应该放在任何构造函数定义之前。
  • 继承:如果此类以前不属于 Qt 元对象系统(例如,它没有 Q_OBJECT 宏或从另一个类继承) ),重新运行 qmake 或对项目文件进行无关紧要的更改以触发 qmake 运行。

以上是为什么我的 Qt 应用程序中出现'Q_OBJECT 链接错误:'对 vtable 的未定义引用'”?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn