2010-04-21 96 views
2

编译项目时出现这个非常奇怪的问题。 MOC似乎正在为正在被moc化的类名称添加一个名称空间,尽管它在文件/类中的任何地方都没有提及。MOC将名称空间添加到类名称

但是,名称空间存在于我使用的库中,但它隐藏在头文件中很远的位置,我不在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

SmpTl是命名空间CaptureController被定义在中,因为它是由MOC发现的。

Q_OBJECT宏扩展到您的类定义内部的staticMetaObject变量的声明中(其中包括扩展)。 MOC文件包含该变量的定义。

如果这不正确,请发布您的Qt版本和精简版头文件。

+1

我发现这个问题,它在include列表中很远的某个头文件的asm代码中缺少'''代码#ifdef'ed只用于MIPS架构,所以编译器没有抱怨失踪“,但不知何故,MOC感到困惑。 – Florin 2010-04-22 09:47:02

1

我也遇到了这个问题。我看起来像这样的代码:

namespace foo { 
    #ifdef _WIN32 
    ... // This code was fine 
    #else 
    #error Not Supported 
    #endif 
} 

这混淆了MOC成想法命名空间foo从未关闭。显然它不知道_WIN32被定义,并且因为我忘记在错误消息中引用引号而被绊倒了。将其更改为

#error "Not Supported" 

解决了我的问题。

+1

跨越完全相同的问题,谢谢!如果#error行包含单引号'''字符,我必须添加它。删除'''或用双引号括住错误字符串'''解决了我的问题。 – Hossein 2014-04-16 14:25:50

相关问题