bonjour,
la sérialisation dans mon application tourne autour de 2 classes:
graph et node;

graph.h
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);
}
graph.cpp
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.h
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);
 
};
Node.cpp

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

la faq indique qu il faut mettre:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
template<> static void AFXAPI SerializeElements<Node*> ( CArchive& ar, Node** pN, int nCount );
dans graph.h, mais quand je le fais j'ai une erreur de compile:
error C2129: static function 'void __stdcall SerializeElements(class CArchive &,class Node ** ,int)' declared but not defined
je l'ai donc enlever.


j'ai bien regarder la faq et je ne vois pas se que je vais comme erreur.
merci d'avance.