Qt 5.7.1 / gcc 6.3.0: error: body of constexpr function 'static constexpr int QMetaTypeId2<T>
Qt 5.7.1 / gcc 6.3.0: error: body of constexpr function 'static constexpr int QMetaTypeId2<T>
这段代码
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)
上失败
../../../../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)上也能正常工作。还没有在更古老的版本上进行测试。
知道这里可能有什么问题吗?
发现问题:
value.setValue(nullptr);
在构造函数中,其中值为 QVariant。
删除了这一行,现在可以编译了。不知道为什么我首先把它放在那里
这段代码
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)
上失败../../../../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)上也能正常工作。还没有在更古老的版本上进行测试。
知道这里可能有什么问题吗?
发现问题:
value.setValue(nullptr);
在构造函数中,其中值为 QVariant。
删除了这一行,现在可以编译了。不知道为什么我首先把它放在那里