【问题标题】:How to deserialize Vector of int using QDataStream如何使用 QDataStream 反序列化 int 的向量
【发布时间】:2018-01-14 06:55:37
【问题描述】:
QVector<int> *l_iVec = new QVector<int>();

l_iVec->push_back(10);
l_iVec->push_back(20);
l_iVec->push_back(30);
l_iVec->push_back(40);

QDataStream dataStream;
dataStream<<l_iVec; //successfully build 

dataStream>>l_iVec; //getting error on this line

 error: invalid operands to binary expression ('QDataStream' and 'QVector<int> *') dataStream>>l_iVec;
               ~~~~~~~~~~^ ~~~~~~

我正在尝试使用 qdatastream 反序列化向量,但出现以下错误,无法看到错误问题。序列化成功,没有错误。

【问题讨论】:

  • 您是在尝试序列化向量还是指向向量的指针?
  • 我成功序列化向量但不是指向向量的指针。我正在尝试两者。

标签: c++ qt serialization deserialization


【解决方案1】:

首先:

QVector<int> *l_iVec = new QVector<int>();

没有充分的理由动态分配QVector,它已经是动态分配数据的一个小包装器。您可以有效地按值返回它,因为该操作不会涉及深拷贝。对于需要通过引用传递的情况,请使用引用而不是指针。

其次,由于您奇怪的分配选择,您当前不是序列化和反序列化向量数据,而是指向它的指针的值。至少取消引用指针,或者更好的是,首先不要使用指针。

QDataStream &   operator<<(QDataStream &out, const QVector<T> &vector)
QDataStream &   operator>>(QDataStream &in, QVector<T> &vector)

如您所见,数据流运算符接受向量引用,而不是向量指针,如果您当前的序列化“有效”,则可能是转换的情况,指针被视为整数。

【讨论】:

  • 有了你的回答,我成功地序列化和反序列化 int 的向量。但我无法使用循环显示反序列化向量,例如 for(int iVec : l_iVec) cout
  • 没有 l_iVect 是反序列化向量 (dataStream>>l_iVec) 而不是指向向量的指针。
  • 它应该可以工作。检查您的代码,或者您的构建是否卡住,您可能需要清理构建并重新构建。 Qt 经常卡住。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-26
  • 1970-01-01
  • 2018-01-23
  • 2015-11-17
  • 2019-04-02
  • 1970-01-01
相关资源
最近更新 更多