Problema di Serializzazione
-
Buongiorno, durante lo sviluppo di un programmino ad uso didattico, ho riscontrato uno strano problema trasportando il sorgente da windows a linux.
Mentre su Windows funziona senza problemi, su linux appena apro un dialogo, mi crasha l'applicazione dicendomi SEGFAULT precisamente a questa determinata riga.
Ho provato a chiedere in giro mi è stato detto che il metodo chiama se stesso.
"point out, your operator >> (or << ) call to itself and never finished"
Non sono un esperto del cpp, ma non riesco a capire dove sia il problema.
visto che semplicemente serializza una stringa.
Sareste così gentili da mostrarmi dov'è che sbaglio e come posso risolvere?se necessitate di ulteriori informazioni qui trovate tutto il sorgente.
-
La differenza tra Windows e Linux non saprei spiegarla, però il metodo in figura è potenzialmente ricorsivo: chiamare
in >> tt
equivale a chiamare l' operatore >> stesso. Operatore che oltretutto è già definito nelle librerie Qt. Volendo tradurre in italiano quello che si vede in figura risulterebbe qualcosa del tipo: "Come si deserializza una QString? Deserializzando una QString".
La differenza tra i sistemi operativi potrebbe consistere nel fatto che in un caso la ricorsività è evitata perché viene chiamata l'implementazione "di default" dell' operatore >>, definito nelle classi di Qt e correttamente funzionante. -
QDataStream &operator<<(QDataStream &out, const QString &str)
eQDataStream &operator>>(QDataStream &in, QString &str)
sono gia' definiti all'interno di Qt. Non c'e' bisogno che tu li ridefinisca.