如何使用QDataStream反序列化int的Vector

时间:2018-01-14 06:55:38

标签: c++ qt serialization deserialization

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反序列化vector但是得到以下错误并且无法看到错误的问题。它是成功序列化而没有错误。

1 个答案:

答案 0 :(得分:3)

首先:

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

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

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

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

如您所见,数据流运算符采用向量引用,而不是向量指针,如果您当前的序列化&#34;工作&#34;这可能是转换的情况,其中指针被视为整数。