2017-05-09 69 views
0

所以我连载我的对象这样,编译器显示了这个没有任何警告:无法反序列化对象 - 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

+4

假设'board'是一个指针,这不会做你想要的所有_。 –

回答

1

那么,首先,我不知道你是否意识到,但你实际上是试图从文件中读取一个指针(Board*)。你通常不这么做,因为只要你不释放它,指针就是好的。有人可能会给你这个文件,并且board位于他们的计算机上时,生成的文件是很无用的。


现在,假设你真正想读的对象(Board),而不是一个指针(Board*):

我想Board是你自己做一个类,是否正确?那么,如果你不覆盖operator>>,那么当你让它读取它时,编译器无法知道猜测。所以你应该覆盖operator>>

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

+0

那么只有运营商“为了保存没有引起警告,因此我还以为我可以用相同的对象来执行”。这是我的错误。这是个愚蠢的问题,我设法通过将mt对象序列化为“c_str”来完成。然后反序列化它。 – nocturne

+0

@nocturne啊,我明白了。 –