Stockage de structures de taille aléatoire (suite..)
Bonjour à tous,
Cette discussion fait suite à la première du même nom que celle ci.
Je suis en train d'essayer de stocker des données à l'aide de QDataSteam (je sais, c'est du Qt mais je pense que le problème est plus d'ordre C++)
Alors voila, j'ai une structure qui contient un énumératif et j'aimerai l'écrire et le lire convenablement.
En Écriture :
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
|
enum Test
{
value_1 = 0,
value_2 = 2,
value_3 = 42,
};
struct help
{
Test value;
};
QDataStream& operator<<(QDataStream &ds, help const& me)
{
ds << me.value;
return (ds)
}
int main(int ac, char **av)
{
help me;
me.value = value_3;
QApplication app(ac, av);
QString fileName = QFileDialog::blaBla
QFile file(fileName);
file.open(...);
QDataStream stockage(&file);
stockage << me;
return (app.exec());
} |
Cela compile (bien sur en complétant ce que j'ai zappe car cela ne sert a rien )
Maintenant la lecture :
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
|
enum Test
{
value_1 = 0,
value_2 = 2,
value_3 = 42,
};
struct help
{
Test value;
};
QDataStream& operator>>(QDataStream &ds, help const& me)
{
ds >> me.value;
return (ds);
}
int main(int ac, char **av)
{
help me;
QApplication app(ac, av);
QString fileName = QFileDialog::blaBla
QFile file(fileName);
file.open(...);
QDataStream stockage(&file);
stockage >> me;
std::cout << me.value << std::endl;
return (app.exec());
} |
Cette partie ne compile pas.. Le seul moyen que j'ai trouvé est de remplacer :
Code:
1 2 3 4 5
|
struct help
{
Test value;
}; |
par :
Code:
1 2 3 4 5
|
struct help
{
int value;
}; |
Et la j'obtiens bien mon 42. Mais je veux pas changer le prototypage de ma structure!
L'erreur de compilation est la suivante :
erreur: no match for QDataStream& operator>> in ds >> me.help::value
candidates are :
...
note: QDataStream& operator>>(QDataStream&, help&)
note: no known coversion for argument 2 from Test to help&
En espérant avoir exposé le problème avec le plus de clarté possible et en donnant le plus d'indications possible aussi.
Merci d'avance si vous avez une idée.