首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Qt 5.7.1 / gcc 6.3.0:错误: constexpr函数'static constexpr int QMetaTypeId2<T>的主体

Qt 5.7.1 / gcc 6.3.0:错误: constexpr函数'static constexpr int QMetaTypeId2<T>的主体
EN

Stack Overflow用户
提问于 2020-08-22 01:49:36
回答 1查看 254关注 0票数 1

这段代码

代码语言:javascript
运行
复制
namespace Config {
  class Value {
  public:
    enum Type {
      Null,
      Integer,
      String,
      Map,
      List,
      Boolean
    };

    Value();
    Value(int v);
    Value(const QString &v);
    Value(const QMap<QString, Value> &v);
    Value(const QList<Value> &v);
    Value(bool v);

    template<class T> T get() const {
      return value.value<T>();
    }

    enum Type type() const;
    enum Type listType() const;
    bool isNull() const;

    void setListType(enum Type t);

    operator QString() const;
    QString toString() const;

  private:
    QVariant value;
    enum Type value_type;
    enum Type list_elements_type;
  };
}

Q_DECLARE_METATYPE(Config::Value)

(https://github.com/olegantonyan/mpz/blob/master/app/config/value.h)在最新版本的gcc/qt上编译,但在Debian stretch上失败(gcc 6.3.0,qt 5.7.1)

代码语言:javascript
运行
复制
../../../../include/x86_64-linux-gnu/qt5/QtCore/qglobal.h:746:47: error: static assertion failed: Type is not registered, please use the Q_DECLARE_METATYPE macro to make it known to Qt's meta-object system

../../../../include/x86_64-linux-gnu/qt5/QtCore/qmetatype.h:1604:100: error: body of constexpr function 'static constexpr int QMetaTypeId2<T>::qt_metatype_id() [with T = std::nullptr_t]' not a return-statement

完整的生成日志https://build.opensuse.org/package/live_build_log/home:oleg_antonyan/mpz/Debian_9.0/x86_64

在CentOS7 (gcc 4.8.5,qt 5.6.1)上也工作得很好。没有在更古老的版本上测试过。

你知道这里会出什么问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-01 20:14:51

发现了问题:构造函数中的value.setValue(nullptr);,其中的值是QVariant。

删除了这一行,现在它编译正常。不知道为什么我一开始就把它放在那里

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63527747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档