应用QT的插件零碎,定义了某命名空间下的枚举类型,导出为库,而后应用该库,用qDebug打印的时候,报错,如下所示:
namespace EnumTestNameSpace { Q_NAMESPACE enum class Test { A = 0x00000001, B, C, D }; Q_ENUM_NS(Test)} // namespace EnumTestNameSpace
EnumTestNameSpace::Test b = EnumTestNameSpace::Test::B;//qDebug() << b; // no right link 2001:无奈解析的内部符号qDebug()<<(int)b;// right 强转过来就没问题qDebug() << (b == EnumTestNameSpace::Test::B);//right 失常进行枚举比拟没问题
起因剖析:
思考是因为跨dll了,而后这个中央qt没有进行解决,moc进行编译的时候,qDebug须要应用qmetaobject,找不到就报错了,该问题的影响范畴应该是除枚举根本应用外的扩大用法。
解决办法:
1.应用程序间接援用xxx.h,QT会对其进行预编译
2.对于枚举类,须要扩大用法的,应用class进行封装,不要应用namespace
class Enum_EXPORT EnumTestClass : public QObject { Q_OBJECT public: enum class Test { A = 0x00000001, B, C, D }; Q_ENUM(Test)}; // namespace EnumTestClass