无法反序列化对象 - Qt

时间:2017-05-09 01:21:43

标签: c++ qt

所以我像这样序列化了我的对象,编译器没有显示这个警告:

QDataStream out(&file);
out.setVersion(QDataStream::Qt_4_5);
out << this->board;

在其他功能中,我想通过以下方式对其进行反序列化:

Board *board;
QDataStream in(&file);
in.setVersion(QDataStream::Qt_4_5);
in >> board;

现在我不能这样做,因为我收到警告,运算符>>与那些操作数不匹配。问题出在哪儿?我按照指南:http://doc.qt.io/qt-5/qtwidgets-tutorials-addressbook-part6-example.html

1 个答案:

答案 0 :(得分:1)

嗯,首先,我不知道你是否已经意识到,但你实际上是在尝试从文件中读取指针(Board*)。你通常不会这样做,因为指针只有在你没有解除分配时才会很好。有人可能已经给你这个文件了,而board位于他们的计算机上时生成的文件对你来说是没用的。

现在,假设您确实想要读取对象(Board)而不是指针(Board*):

我认为Board是你自己创作的一堂课,对吗?好吧,如果你不覆盖operator>>,编译器在你要求它读取它时就不会知道猜测。所以你应该覆盖operator>>

在您链接到的Qt页面中,它们不会显示所有代码。查看页面底部的链接,您会看到this one。正如您所看到的,contactsQMap,我认为它有一个被覆盖的operator>>。这就是他们被允许写in >> contacts here

的原因