MOC将命名空间添加到类名

时间:2010-04-21 15:58:03

标签: c++ qt compilation moc

编译项目时我遇到了这个非常奇怪的问题。 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集成。

2 个答案:

答案 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版本和标题文件的精简版。