错误:'operator>>'不匹配(操作数类型为 'QDataStream' 和"Unit*")
error: no match for 'operator>>' (operand types are 'QDataStream' and 'Unit*')
我正在尝试为一个名为 Unit 的自定义类定义运算符>>和<<,我需要存储一个指针。
这是我定义函数的方式
QDataStream &operator<<(QDataStream &out, const Unit *unit)
{
out << unit->value();
return out;
}
QDataStream &operator>>(QDataStream &in, Unit *unit)
{
double value;
in >> value;
unit->setUserValue(value);
return in;
}
void Unit::setUserValue(const qreal userValue)
{
qDebug() << "setUserValue" << this->userValue() << userValue << QString::number(m_unit,2);
if (this->userValue() == userValue)
return;
if(isDefault())
m_value = userValue;
else
m_value = UnitManager::convertFrom(userValue,m_unit);
qDebug() << "Value" << m_value;
emit userValueChanged();
setDirty(RamDirty);
}
qRegisterMetaType<Unit*>();
qRegisterMetaTypeStreamOperators<Unit *>();
我收到以下编译错误消息
error: no match for 'operator>>' (operand types are 'QDataStream' and 'Unit*')
这里还有一个错误
/usr/include/qt/QtCore/qmetatype.h:771: error: invalid initialization of non-const reference of type 'quint8& {aka unsigned char&}' from an rvalue of type 'quint8 {aka unsigned char}'
stream >> *static_cast<T*>(t);
^
我还定义了元类型
Q_DECLARE_METATYPE(Unit)
Q_DECLARE_METATYPE(Unit*)
单元类接口
class Unit : public EraObject
{
Q_OBJECT
Q_PROPERTY(qreal userValue READ userValue WRITE setUserValue NOTIFY userValueChanged)
Q_PROPERTY(quint32 category READ category CONSTANT)
Q_PROPERTY(quint32 unit READ unit WRITE setup)
Q_PROPERTY(QString symbol READ symbol NOTIFY symbolChanged)
Q_ENUMS(CategoryId)
Q_ENUMS(UnitId)
public:
Unit(const Unit &other);
Unit(int unit = Default, QObject *parent = 0);
~Unit() {}
enum CategoryId {
NoneCategory,
TemperatureCategory,
PressureCategory,
CountCategory
};
enum UnitId {
Default = NoneCategory,
//Temperature
Celsius = TemperatureCategory << 16, Fahrenheit,
CountTemperature,
//Pressure
Pascal = PressureCategory << 16, Bar,
CountPressure
};
qreal value() const { return m_value; }
qreal userValue() const;
quint32 category() const { return m_unit >> 16 ; }
quint32 unit() const { return m_unit; }
QString symbol() const;
inline bool isDefault() const { return !(m_unit & 0xffff); }
//Operators
operator qreal() const;
Unit& operator=(const qreal value);
bool operator==(const Unit &other) const { return (m_value == other.m_value); }
bool operator<(const Unit &other) const { return (m_value < other.m_value); }
void loadFrom(Settings &set, bool ownGroup = true) override;
void saveTo(Settings &set, bool ownGroup = true, bool force = false) override;
private:
qreal m_value;
quint32 m_unit;
signals:
void userValueChanged();
void unitChanged(int unit);
void symbolChanged();
public slots:
void changeUnit(const quint32 &unit);
void setUserValue(const qreal userValue);
void setup(quint32 unit, const QString name = QString(),QObject *parent = 0);
};
Q_DECLARE_METATYPE(Unit*)
更新:
QDataStream &operator<<(QDataStream &out, const Unit *&unit)
{
out << unit->value();
return out;
}
QDataStream &operator>>(QDataStream &in, Unit *&unit)
{
qreal value;
in >> value;
unit->setUserValue(value);
return in;
}
在主我定义
qRegisterMetaType<Unit*>();
qRegisterMetaTypeStreamOperators<Unit *>();
在 Unit.h 的标题中,我定义
Q_DECLARE_METATYPE(Unit*)
Q_DECLARE_METATYPE(Unit)
QDataStream &operator<<(QDataStream &out, Unit *&unit);
您正在尝试传递指针而不是对指针的引用。
但无论如何,对流运算符使用可复制和可自我构造的类型是一种很好的做法。因为未初始化的指针有很多潜在的错误。
相关文章:
- 如何知道QDataStream不能反序列化某些内容
- EASTL矢量<向量<int>>连续的
- 如何使用 QDatastream 通过 QTcpSocket 发送 QSqlQueryModel?
- QDataStream 读取和写入的字节数比 QFile::length() 报告要多
- 如何在Qt中使用QDataStream将自定义结构保存/加载到二进制文件中?
- QDataStream read to QVector
- QTcpServer/QTcpSocket:使用 QDataStream 与直接发送 UTF-8 数据
- 与"运算符>>"不匹配(操作数类型为"QDataStream"和"QJsonObject")
- 从QDataStream读取/写入QT
- 不明确的错误重载运算符<<QdataStream 子类和个人类
- 使用 QDataStream 对原始数据进行反序列化
- QDataStream and Flush
- 将特征向量序列化为 QDataStream
- 带有QDataStream的TGA读取标头
- 使用 QString 和 QByteArray 的 QDataStream 问题
- 通过QDataStream从客户端发送到服务器的字节不匹配
- 将自定义 QMetaType 与 QDataStream 结合使用
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- C 字符串比较“祝您好运”&gt;“再见”
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败