bonjour,
la sérialisation dans mon application tourne autour de 2 classes:
graph et node;
graph.h
graph.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 class Graph : public CObject { public : CArray<Node*,Node*> m_tab_nodes ; /*......*/ DECLARE_SERIAL(Graph); void Serialize(CArchive& ar); }
Node.h
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 template <> static void AFXAPI SerializeElements<Node*> ( CArchive& ar, Node** pN, int nCount ) { for ( int i = 0; i < nCount; i++, pN++ ) { (*pN)->Serialize(ar); } } IMPLEMENT_SERIAL (Graph, CObject, 1); void Graph::Serialize(CArchive& ar) { CObject::Serialize(ar); m_tab_nodes.Serialize(ar); }
Node.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 class Node :public CObject { /*....*/ DECLARE_SERIAL(Node); void Serialize(CArchive& ar); };
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 IMPLEMENT_SERIAL (Node, CObject, 1); void Node::Serialize(CArchive& ar) { CObject::Serialize(ar); if (ar.IsStoring()) { ar<</*mes attributs int/CString*/; } else { ar>>/*mes attributs int/CString*/; }
la sauvegarde se passe sans problème (du moins il me semble car le nCount vaut bien le nombre de Node que j'ai enregistré ).
lors du chargement l' erreur vient de la ligne :
(*pN) étant un pointeur sur NULL ,ca plante.Je ne vois pas quoi faire pour contourner cette erreur
Code : Sélectionner tout - Visualiser dans une fenêtre à part (*pN)->Serialize(ar);
la faq indique qu il faut mettre:dans graph.h, mais quand je le fais j'ai une erreur de compile:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 template<> static void AFXAPI SerializeElements<Node*> ( CArchive& ar, Node** pN, int nCount );
je l'ai donc enlever.error C2129: static function 'void __stdcall SerializeElements(class CArchive &,class Node ** ,int)' declared but not defined
j'ai bien regarder la faq et je ne vois pas se que je vais comme erreur.
merci d'avance.
Partager