C++ 对staticMetaObject的未定义引用
看起来Qt没有正确处理宏,因为我得到了下面的错误。有人知道为什么吗 错误:未定义对“Exception::staticMetaObject”的引用 编辑:后来我发现MOC没有生成MOC_exception.cpp。有时,当我切换编译器工具包时,它可以很好地编译,但如果我添加了另一个继承异常的类,则它再次无法工作。问题应该在MOC中的某个地方,在某些情况下忽略Q_GADGET宏 我有Qt5.5.0 project.proC++ 对staticMetaObject的未定义引用,c++,qt,C++,Qt,看起来Qt没有正确处理宏,因为我得到了下面的错误。有人知道为什么吗 错误:未定义对“Exception::staticMetaObject”的引用 编辑:后来我发现MOC没有生成MOC_exception.cpp。有时,当我切换编译器工具包时,它可以很好地编译,但如果我添加了另一个继承异常的类,则它再次无法工作。问题应该在MOC中的某个地方,在某些情况下忽略Q_GADGET宏 我有Qt5.5.0 project.pro CONFIG += c++11 QT += core QT -= gui
CONFIG += c++11
QT += core
QT -= gui
SOURCES += \
main.cpp
HEADERS += \
nobject.h \
exception.h
nobject.h
#如果没有对象#
#定义NOBJECT_H
#包括
类对象
{
Q_小工具
公众:
NObject(){}
虚拟~NObject(){}
};
#endif//NOBJECT\u H
异常.h
\ifndef异常
#定义异常
#包括“nobject.h”
类异常:public NObject
{
Q_小工具
公众:
异常(){}
虚拟~Exception(){}
};
#endif//EXCEPTION\u H
main.cpp
#包括
#包括“exception.h”
使用名称空间std;
int main(int argc,char*argv[]){
例外对象;
std::cout在我的环境中,此代码是正确的。但我已将其添加到构造函数NObject的主体中。我怀疑运行qmake可能会解决您的问题。请记住,每次添加或删除Q_GADGET或Q_OBJECT宏时都要重新运行qmake,以使moc工具重新生成元数据的代码
通过查看您的代码,我没有发现任何问题,所以我将代码复制粘贴到我的机器上,并构建和运行它。在我添加NoObject构造函数的实现后,它构建正常。我在Qt5和Qt4上成功构建并运行了它,程序在控制台上打印了异常
Qt 5:
Qt 4:
这是一个经常引起我注意的问题。默认情况下,qmake添加了一个规则,当Makefile从项目文件中过期时生成它。但是当您在$HEADERS
中将一个MOC宏添加到文件中时,它不知道需要更新它。您应该能够生成-B Makefile
来强制执行它。如果我不使用qmake?不使用它呢这里的任务是调用moc为新添加的元对象生成代码。您也可以手动运行moc。如果您手动编写Makefile,您可以在此处检查如何自动运行moc:。在cmake中,您使用cmakelists文件中的特定命令并重新运行cmake以重新生成元数据:
> ~/temp/qgadgettest$ qmake --version
QMake version 3.0
Using Qt version 5.2.1 in /usr/lib/i386-linux-gnu
> /temp/qgadgettest$ ./qgadgettest
Exception
> ~/temp/qgadgettest$ qmake-qt4 --version
QMake version 2.01a
Using Qt version 4.8.6 in /usr/lib/i386-linux-gnu
> ~/temp/qgadgettest$ ./qgadgettest
Exception