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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
struct help
{
  Test value;
};
par :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.