编译项目时我遇到了这个非常奇怪的问题。 MOC似乎在为moc'ed的类名添加一个名称空间,尽管在文件/类中没有提到它。
然而,命名空间存在于我使用的库中,但是它远在头文件中隐藏,我不在UI文件中使用它。这就是MOC产生的:
const QMetaObject SmpTl::CaptureController::staticMetaObject = {
{ &QObject::staticMetaObject, qt_meta_stringdata_SmpTl__CaptureController,
qt_meta_data_SmpTl__CaptureController, 0 }};
在SmpTl
的声明中没有提到CaptureController
命名空间,但它出现在MOC生成的.cpp文件中。
我正在使用Visual Studio与QT集成。
答案 0 :(得分:2)
我也遇到了这个问题。我的代码看起来像这样:
namespace foo {
#ifdef _WIN32
... // This code was fine
#else
#error Not Supported
#endif
}
这个混淆MOC的思维命名空间foo
从未关闭过。显然,它不知道_WIN32
被定义了,并且由于忘记在错误消息周围加上引号而被绊倒了。将其更改为:
#error "Not Supported"
解决了我的问题。
答案 1 :(得分:0)
SmpTl
是由MOC找到的名称空间CaptureController
。
Q_OBJECT
宏扩展为类定义中staticMetaObject
- 变量的声明(以及它扩展到的其他内容)。 MOC文件包含该变量的定义。
如果这不正确,请发布您的Qt版本和标题文件的精简版。