2017-05-09 2 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'がポインタであると仮定すると、これは_at all_を必要としません。 –

答えて

1

あなたが気付いたかどうかはわかりませんが、実際にはファイルからポインタ(Board*)を読み取ろうとしています。ポインタは割り当てを解除しない限り、ポインタは有効であるため、通常は行いません。誰かがあなたにこのファイルを与えている可能性があります。そして、生成されたファイルがあなたには役に立たないときは、boardが自分のコンピュータに配置されています。


、あなたが実際にオブジェクト(Board)ではなくポインタ(Board*を)読みたかったと仮定すると:

私はBoardが正しい、あなた自身が作ったクラスであると仮定?さて、operator>>を上書きしないと、コンパイラは読んだときにやるべきことを知ることができません。したがって、operator>>を無効にする必要があります。

あなたがリンクしたQtページでは、すべてのコードが表示されません。ページの下部にあるリンクを見ると、this oneが表示されます。ご覧のとおり、contactsQMapです。これは、operator>>がオーバーライドされていると想定しています。このため、彼らはin >> contactshereと書くことができます。

+0

オペレータ<<保存のために警告を出さなかったので、私は同じオブジェクトでもできると思っていました。これは私の間違いを引き起こしていた。これは疑わしい質問でした。私はmtオブジェクトを "c_str"にシリアル化することによってそれを行うことができました。そしてそれを逆シリアル化する。 – nocturne

+0

@nocturneああ、そうだ。 –