2017-05-09 90 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啊,我明白了。 –