题
在编译项目时,我有一个非常奇怪的问题。 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"
修复了我的问题。
不隶属于 StackOverflow