在编译项目时,我有一个非常奇怪的问题。 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文件中。

我正在使用QT集成的Visual Studio。

有帮助吗?

解决方案

SmpTl 是名称空间 CaptureController 定义在MOC中发现。

Q_OBJECT 宏扩展到 staticMetaObject- 在您的类定义内部变量(除其他内容外,还将扩展到)。 MOC文件包含该变量的定义。

如果这是不正确的,请发布您的QT版本和标题文件的脱衣版本。

其他提示

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

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

这个混乱的MOC进入思维名称空间 foo 从未关闭。显然,它不知道 _WIN32 被定义了,并因我忘了在错误消息周围引用引号的事实而被绊倒。将其更改为:

#error "Not Supported"

修复了我的问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top