当前位置:  开发笔记 > 编程语言 > 正文

Qt和没有moc _*.cpp文件

如何解决《Qt和没有moc_*.cpp文件》经验,为你挑选了1个好方法。

我正在开发一个简单的Qt 4应用程序并进行自己的对话.我继承了QDialog,Q_OBJECT在类声明块中插入了宏,并且......我得到了

[链接器错误]未定义对'vtable for MyDialog'的引用,并且没有moc编译器生成的moc_MyDialog.cpp.

我在Windows XP和mingw上使用Qt 4.1.3.我从Qt提供的构建shell中遵循构建过程.我使用qmake创建make文件并使用make命令编译所有内容.

我有一个子类,其他类QPushButtonQObject分别,但他们编译OK.我找不到他们和破碎的人之间的任何差异.

在破碎的课堂上肯定会遗漏一些东西,但我无法发现它.



1> David Dibben..:

由于没有moc文件,导致对"vtable for MyDialog"的未定义引用.大多数c ++编译器在包含第一个虚函数的目标文件中创建vtable定义.当子类化qt对象并使用Q_OBJECT宏时,它将在moc*.cpp文件中.因此,此错误意味着缺少moc文件.

我能想到的可能问题是:

    类MyDialog.h的头文件未添加到qmake文件中的HEADERS.

    添加Q_OBJECT宏之前,您运行了qmake来生成make文件.这创建了一个没有moc规则的make文件.只需再次运行qmake即可轻松解决此问题.

    您的对话框派生自多个类,QDialog不是它派生的第一个类.为了使qmake正常工作,QObject派生的基类需要是继承自的第一个类.

    如果您使用的是Qt Creator,如果您之前的部署由于某种原因(例如应用程序已在运行)而失败,则可能会出现此错误.在这种情况下,只需执行"清理项目",然后执行"重建项目",然后执行"运行"即可部署.

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有