为什么在 Qt cpp 源代码中添加 .moc 文件的包含很重要?
这是几个 Qt 示例中使用的常见步骤,包括这个:
http://doc.qt.io/qt-5/qttestlib-tutorial1-example.html; #include "testqstring.moc"
行应该包含在文件末尾。
我不明白为什么这是必要的。
最佳答案
如果您在 .cpp
文件中使用 Q_OBJECT
宏定义 QObject
子类,则这是必要的。 当您这样做:
qmake
必须在您的Makefile
中生成规则以调用.cpp
上的moc
> 文件。那个特殊的(hackish?)包含触发
qmake
这样做,并告诉它哪个是moc
的输出文件(teststring.moc
) 在你的.cpp
上调用时。为了编译
moc
的输出(仍然是一堆 C++ 代码),编译器必须看到您的类定义。否则,它将提示没有YourClass::staticMetaObject
之类的东西,因为它不知道YourClass
存在。通常在头文件中定义具有
Q_OBJECT
的类。moc
然后将#include "header.h"
添加到其生成的输出中,这意味着可以愉快地编译moc
的输出。但是如果您的类定义在
.cpp
中怎么办?您不能在moc
的输出中#include
.cpp
文件,因为那样会给您带来大量的重新定义错误。相反,您将
#include
moc
的输出放在您的.cpp
中,这样它就可以一起编译,每个人都很开心。 (这意味着qmake
只会发出一个规则说要运行moc
,而不是告诉编译器编译moc
的输出的另一条规则。)
从 2. 您还可以推测在 .h
中使用 Q_OBJECT
定义类不需要任何特殊包含。
关于c++ - 为什么在 Qt 源代码文件末尾包含 ".moc"文件很重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34928933/