Bonjour à tous,
J'ai un problème lors de l'utilisation de l'opérateur<< avec un QDataStream quand le type sérialisé est une QList de classes personnalisées.
Le code concerné est ici :
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45 #ifndef TILEINFOMESSAGE_H_ #define TILEINFOMESSAGE_H_ #include "AbstractMessage.h" #include <common.h> #include <QMetaType> #include <QPoint> #include <QList> #include "StaticObjectInfoMessage.h" namespace protocol { class COMMONSHARED_EXPORT TileInfoMessage : public AbstractMessage { public: TileInfoMessage(); ~TileInfoMessage(); QPoint & tilePos(); void setTilepos(QPoint); qint32 & altitude(); void setAltitude(qint32); QList<protocol::StaticObjectInfoMessage > & staticObjects(); void setStaticobjects(QList<protocol::StaticObjectInfoMessage >); qint8 & walkable(); void setWalkable(qint8); QString messageName(); qint32 messageId(); void serializeInto(QDataStream &); void unserializeFrom(QDataStream &); private: QPoint _tilePos; qint32 _altitude; QList<protocol::StaticObjectInfoMessage > _staticObjects; qint8 _walkable; }; } Q_DECLARE_METATYPE(protocol::TileInfoMessage) QDataStream &operator<<(QDataStream &, protocol::TileInfoMessage &); QDataStream &operator>>(QDataStream &, protocol::TileInfoMessage &); #endif /* TILEINFOMESSAGE_H_ */Tous les fichiers sont générés par un script donc protocol::StaticObjectInfoMessage est identique à protocol::TileInfoMessage mis a part les getters/setters et les attributs private.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 //Ceci est la ligne 28 (l'extrait de code commence donc ligne 29) void TileInfoMessage::serializeInto(QDataStream & stream) { TileInfoMessage message = *this; stream << message.tilePos(); stream << message.altitude(); stream << message.staticObjects(); stream << message.walkable(); }
Le compilateur me renvoie vers des lignes de code de Qt :
Je ne voit pas d'où vient ce problème sachant que c'est un problème à la compilation et non à l’exécution (donc qRegisterMetaTypeStreamOperators ou les autres fonctions de QMetaType ne changent rien)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 In file included from c:\Qt\Desktop\Qt\4.7.4\mingw\include\QtCore/QDataStream:1, from ..\..\src\common\game\protocol\/AbstractMessage.h:5, from ..\..\src\common\game\protocol\/TileInfoMessage.h:4, from ..\..\src\common\game\protocol\TileInfoMessage.cpp:1: c:\Qt\Desktop\Qt\4.7.4\mingw\include\QtCore/qdatastream.h: In function 'QDataStream& operator<<(QDataStream&, const QList<T>&) [with T = protocol::StaticObjectInfoMessage]': ..\..\src\common\game\protocol\TileInfoMessage.cpp:34: instantiated from here c:\Qt\Desktop\Qt\4.7.4\mingw\include\QtCore/qdatastream.h:263: error: no match for 'operator<<' in 's << ((const QList<protocol::StaticObjectInfoMessage>*)l)->QList<T>::at [with T = protocol::StaticObjectInfoMessage](i)' c:\Qt\Desktop\Qt\4.7.4\mingw\include\QtCore/qdatastream.h:156: note: candidates are: [...]
Merci d'avance pour votre aide !
Partager