首页 > 后端开发 > C++ > 正文

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

Linda Hamilton
发布: 2024-10-28 03:51:02
原创
240 人浏览过

 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!