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但是得到以下错误并且无法看到错误的问题。它是成功序列化而没有错误。
答案 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;这可能是转换的情况,其中指针被视为整数。