所以我像这样序列化了我的对象,编译器没有显示这个警告:
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。
答案 0 :(得分:1)
嗯,首先,我不知道你是否已经意识到,但你实际上是在尝试从文件中读取指针(Board*
)。你通常不会这样做,因为指针只有在你没有解除分配时才会很好。有人可能已经给你这个文件了,而board
位于他们的计算机上时生成的文件对你来说是没用的。
现在,假设您确实想要读取对象(Board
)而不是指针(Board*
):
我认为Board
是你自己创作的一堂课,对吗?好吧,如果你不覆盖operator>>
,编译器在你要求它读取它时就不会知道猜测。所以你应该覆盖operator>>
。
在您链接到的Qt页面中,它们不会显示所有代码。查看页面底部的链接,您会看到this one。正如您所看到的,contacts
是QMap
,我认为它有一个被覆盖的operator>>
。这就是他们被允许写in >> contacts
here。