我正在开发一个简单的 Qt 4 应用程序并制作自己的对话框。我子类化了QDialog
,插入Q_OBJECT
类声明块中的宏,并且......我明白了
[链接器错误]未定义对“MyDialog vtable”的引用,并且没有
moc_MyDialog.cpp 由 moc 编译器生成。
我在 Windows XP 和 mingw 上使用 Qt 4.1.3。我从 Qt 提供的构建 shell 中遵循了构建过程。我使用 qmake 创建 make 文件并使用 make 命令编译所有内容。
我还有其他子类QPushButton
and QObject
分别,但它们编译正常。我找不到它们和破损的有什么区别。
破碎的班级中肯定缺少一些东西,但我无法发现它。
由于没有 moc 文件,导致对“vtable for MyDialog”的未定义引用。大多数 C++ 编译器在包含第一个虚函数的目标文件中创建 vtable 定义。当子类化 qt 对象并使用 Q_OBJECT 宏时,这将位于 moc*.cpp 文件中。因此,这个错误意味着moc文件丢失。
我能想到的可能出现的问题有:
类 MyDialog.h 的头文件未添加到 qmake 文件中的 HEADERS 中。
您运行 qmake 来生成 make 文件before添加 Q_OBJECT 宏。这创建了一个没有 moc 规则的 make 文件。只需再次运行 qmake 即可轻松解决此问题。
您的对话框派生自多个类,并且 QDialog 不是它派生的第一个类。为了使 qmake 正确工作,QObject 派生基类必须是第一个继承的类。
如果您使用 Qt Creator,并且之前的部署由于某种原因(例如应用程序已在运行)而失败,则可能会收到此错误。在这种情况下,只需执行“清理项目”,然后“重建项目”,然后“运行”即可进行部署。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)