【发布时间】:2015-06-30 15:36:44
【问题描述】:
我有一个从 .pro 文件生成的项目。因为没有生成 MOC 文件,所以无法编译。
-
Q_OBJECT用于要 MOCed 的类的标头中 -
#pragma once用于要 MOCed 的类的标头中
我将详细程度设置为详细,我可以看到 moc 在正确的类上被调用。然后,出现以下错误:standard input(0): Note: No relevant classes found. No output generated.
最后,编译器无法链接 moc 文件,构建失败:
8> moc_myClass.cpp
8>c1xx : fatal error C1083: Cannot open source file:
'D:\Things\\L_build\Stuff\moc\moc_myClass.cpp': No such file or directory
有什么线索吗?
【问题讨论】:
-
您的头文件中是否有任何“非常规”的预处理器命令,并且 Q_OBJECT 宏的位置是否正确? (与一些示例文件比较)
-
这些类最终是否派生自
QObject?Q_OBJECT宏是否存在于至少一个派生自QObject的类的内部? moc 必须同时满足两者才能生成输出。这个问题现在有点离题,因为没有显示重现该问题的代码。 -
"Q_OBJECT 用于要 MOCed 的类的标头中" 它应该用于从
QObject派生的每个类的声明中,而不仅仅是在标头中的某个位置。Q_OBJECT扩展为staticMetaObject成员声明。因此,它只在类声明中才有意义,否则会被 moc 忽略。 -
Q_OBJECT 宏不是问题所在。我有一个非常相似的项目,它正在编译,具有相同的 Q_OBJECT 定义。我无法发现导致编译失败的两个项目之间的差异
标签: c++ qt visual-studio-2013 compiler-errors moc