Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

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.

    alt text

    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.

    https://github.com/Thejuster/Mappy



  • 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) e QDataStream &operator>>(QDataStream &in, QString &str) sono gia' definiti all'interno di Qt. Non c'e' bisogno che tu li ridefinisca.


Log in to reply