【问题标题】:MOC file generation in VS2013VS2013中的MOC文件生成
【发布时间】: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 宏的位置是否正确? (与一些示例文件比较)
  • 这些类最终是否派生自QObjectQ_OBJECT 宏是否存在于至少一个派生自QObject 的类的内部? moc 必须同时满足两者才能生成输出。这个问题现在有点离题,因为没有显示重现该问题的代码。
  • "Q_OBJECT 用于要 MOCed 的类的标头中" 它应该用于从 QObject 派生的每个类的声明中,而不仅仅是在标头中的某个位置。 Q_OBJECT 扩展为 staticMetaObject 成员声明。因此,它只在类声明中才有意义,否则会被 moc 忽略。
  • Q_OBJECT 宏不是问题所在。我有一个非常相似的项目,它正在编译,具有相同的 Q_OBJECT 定义。我无法发现导致编译失败的两个项目之间的差异

标签: c++ qt visual-studio-2013 compiler-errors moc


【解决方案1】:

我通过以下两个步骤解决问题: 1.删​​除Q_OBJECT并重建 2.添加Q_OBJECT并重新构建

【讨论】:

  • 供将来参考:可能还需要删除 Visual Studio 中“生成的文件”下的 moc_XYZ 文件,然后清理并重建。
猜你喜欢
  • 2010-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多