Problème de sérialisation de QDataStream
Bonjour à tous,
Je me tourne vers vous en espérant résoudre un problème que je n'arrive pas à résoudre depuis quelques jours.
Des amis et moi avons un projet sur Developpez, nous réalisons un jeu en C++.
Et nous tentons de sauvegarder le compte de l'utilisateur, ainsi que ses personnages.
C'est ici que nous nous retrouvons bloqué.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| void Save_load::load_Game_Test()
{
qDebug() << "Chargement";
QFile f("Sauvegarde.bin");
if(!f.exists())
{
qDebug() << "Erreur : fichier inexistant";
}
else
{
qDebug() << "Fichier existe";
f.open(QIODevice::ReadOnly);
QDataStream binStream(&f);
// On spécifie la version de l'encodage qui va être utilisé par notre objet QDataStream
binStream.setVersion(QDataStream::Qt_4_4);
// On écrit nos differents objet dans le fichier
Compte *compte = new Compte;
binStream >> compte;
f.close();
}
}
void Save_load::save_Game(Compte compte)
{
qDebug() << "Sauvegarde";
QFile file("Sauvegarde.bin");
// Ouverture du fichier en écriture seule
if (!file.open(QIODevice::WriteOnly))
return;
// Création de notre QDataStream à partir de notre fichier précédemment ouvert
QDataStream binStream(&file);
// On spécifie la version de l'encodage qui va être utilisé par notre objet QDataStream
binStream.setVersion(QDataStream::Qt_4_4);
// On écrit nos differents objet dans le fichier
binStream << compte;
// On ferme le fichier
file.close();
} |
Après quelques tests, il s'avère que le code fonctionne très bien, pour des objets Qt. Mais cet objet est une instance d'une classe créée par nous-même.
Pourtant, les opérateurs d'injections ont été surchargé.
Dans Compte.cpp
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| QDataStream& operator << (QDataStream& out, Compte& compte)
{
out << compte.getUsername(); // le username est un QString
out << compte.getPassword(); // le password aussi
return out;
}
QDataStream& operator >> (QDataStream& in, Compte& compte)
{
QString temp;
in >> temp;
compte.setUsername(temp);
in >> temp;
compte.setPassword(temp);
return in;
} |
Dans Compte.h:
Code:
1 2
| friend QDataStream& operator << (QDataStream&, const Compte&);
friend QDataStream& operator >> (QDataStream&, Compte&); |
Je vous remercie d'avance pour votre aide précieuse.
shini86161.