Serializé une classe dérivée d'une autre puis d'une autre puis....d'une

equimose Messages postés 65 Date d'inscription jeudi 4 septembre 2003 Statut Membre Dernière intervention 17 avril 2009 - 2 août 2005 à 20:43
equimose Messages postés 65 Date d'inscription jeudi 4 septembre 2003 Statut Membre Dernière intervention 17 avril 2009 - 8 août 2005 à 23:27
salut a tous
Bon g une big question pour un big boss! et c dur!
si tu peu y repondre.
moi ce que je veu c sérialisé le dernier objet dérivé!


j'ai deux classes : ////////C PAS DU CODE
CLigne qui dérive de CObject
{
CObject m_ptA , m_ptB
}
ET ///toujours pas du code


CHorizon qui dérive de CLigne
{
CLigne m_Horizon , m_Verticale //deux lignes
CString m_NameHorizon
}


Moi je voudrai sérialisé l'Objet de classe CHorizon qui derive de CLigne
comment c'est ty que je doi my prendre ?



bye

35 réponses

xterminhate Messages postés 371 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 23 septembre 2009
2 août 2005 à 21:23
Une méthode sérialise "à la main" avec un zest de virtual pour l'héritage...

Cordialement,
Xterminhate.
0
equimose Messages postés 65 Date d'inscription jeudi 4 septembre 2003 Statut Membre Dernière intervention 17 avril 2009
2 août 2005 à 22:14
moi la serialization j'y connais vraiment que dale!


alors alors alors.. guide moa
0
xterminhate Messages postés 371 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 23 septembre 2009
2 août 2005 à 22:16
Bien que ce soit un détail, tu veux sérialiser vers un flux texte ou binaire ?...

Cordialement,
Xterminhate.
0
equimose Messages postés 65 Date d'inscription jeudi 4 septembre 2003 Statut Membre Dernière intervention 17 avril 2009
2 août 2005 à 22:20
binaire je crois

c l'objet de la classe CHorizon que je veu serializé. et la classe Chorizon hérite de CLigne qui hérite de CObject

c jouable ca ?

--//Equimose//--
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
equimose Messages postés 65 Date d'inscription jeudi 4 septembre 2003 Statut Membre Dernière intervention 17 avril 2009
2 août 2005 à 22:23
je me sui laissé dire que ca servai a rien ca car c l'object Chorizon que je veu serialize ???


void CLigne::Serialize(CArchive& ar)
{
CObject::Serialize(ar);

if (ar.IsStoring())
{
// storing code
ar<<m_ptA<<m_ptB;
}

else
{
// loading code
ar>>m_ptA>>m_ptB;
}
}
0
xterminhate Messages postés 371 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 23 septembre 2009
2 août 2005 à 22:23
Quand tu vas appeler CHor::serialize(), celle ci doit appeler CLigne::serialize(), qui eappelle CObject::serialize().....

Cordialement,
Xterminhate.
0
equimose Messages postés 65 Date d'inscription jeudi 4 septembre 2003 Statut Membre Dernière intervention 17 avril 2009
2 août 2005 à 22:28
ma fonction serialise de CLigne serrai alors :


void CLigne::Serialize(CArchive& ar)
{
CObject::Serialize(ar);

}

????

enfait je stocke mes horizon dans un tableau d'object m_oaHorizon
et j'appele la fonction dessus comme ca : m_oaHorizon.Serialize(ar)

ca c dans la fonction serialize de la classe CDoc

ca gére ???
0
xterminhate Messages postés 371 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 23 septembre 2009
2 août 2005 à 22:34
La sérialisation consite à stocker l'état de ton objet. Si tu n'as pas de membre à stocker, alors effectivement, serialise ne sert à rien.

Cordialement,
Xterminhate.
0
equimose Messages postés 65 Date d'inscription jeudi 4 septembre 2003 Statut Membre Dernière intervention 17 avril 2009
2 août 2005 à 22:34
dans ma classe horizon g aussi une fonction serialize


void CHorizon::Serialize(CArchive& ar)
{
CLigne::Serialize(ar);

if (ar.IsStoring())
ar<<m_Horizon;
//<<m_Verticale;//<<m_NameHorizon;
else
ar>>m_Horizon;
//>>m_Verticale;//>>m_NameHorizon;



}

mais il me fais un bug a la compile :
'<<' binaire : aucun opérateur qui accépte une opérande de parite gauche de type CArchive( ou ils 'existe pas de conversion acceptable)
0
xterminhate Messages postés 371 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 23 septembre 2009
2 août 2005 à 22:39
Pourquoi sérialiser dans une classe MFC. N'importe quel flux std ne suffit pas ?

string CHor::serialize() const {}

Cordialement,
Xterminhate.
0
equimose Messages postés 65 Date d'inscription jeudi 4 septembre 2003 Statut Membre Dernière intervention 17 avril 2009
2 août 2005 à 22:46
je vois pas ou est la problem ??
c quoi ton code ?
moi g trois variable membres dans mon objet horizon
deux CLigne m_horizon, m_verticale
une CString m_NameHorizon

je veux sérialisé tou ca... d'un coup
0
xterminhate Messages postés 371 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 23 septembre 2009
2 août 2005 à 22:52
Soit les membres sont sérialisable (ils ont une méthode sérialize) et dans ce cas, tu fais un simple appel a ces fonctions. Soit les membres ne sont pas sérialisable (les type integral par exemple), tu les sérialises avec du code à toi...

Cordialement,
Xterminhate.
0
equimose Messages postés 65 Date d'inscription jeudi 4 septembre 2003 Statut Membre Dernière intervention 17 avril 2009
2 août 2005 à 23:50
C'est quoi un type intégral ?
mais si parmis mes trois ou quatres membre j'avai eu des types non serializable tu me l'aurais dit ?
je n'est que des Lignes et des String. Tout est sérialisable la non ?
Une Cstring c'est serializable ?
0
xterminhate Messages postés 371 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 23 septembre 2009
3 août 2005 à 08:31
As tu parfaitement suivi la MSDN pour toutes tes classes serializables ? Donne ton code pour CHor et CLign complet.
0
equimose Messages postés 65 Date d'inscription jeudi 4 septembre 2003 Statut Membre Dernière intervention 17 avril 2009
3 août 2005 à 14:37
merci de m'aider
ouai g suivi ce que me disai mon bouquin pour ce qui de la msdn( l'aide de VC++ -ya pas grand chose)

j'ai implementer les macro pour mes deux classe

pour ma Classe CHorizon :
IMPLEMENT_SERIAL (CHorizon,CLigne,1); ET
DECLARE_SERIAL (CHorizon);

void CHorizon::Serialize(CArchive& ar) /// la ca plante regarde plus haut pour le message derreur
{
CObject::Serialize(ar);

if (ar.IsStoring())
ar<<m_Horizon;
//<<m_Verticale;//<<m_NameHorizon;
else
ar>>m_Horizon;
//>>m_Verticale;//>>m_NameHorizon;
}

pour ma Classe CLigne :
IMPLEMENT_SERIAL (CLigne,CObject,1); ET
DECLARE_SERIAL (CHorizon);

void CLigne::Serialize(CArchive& ar) /// la ca compile
{
CObject::Serialize(ar);

if (ar.IsStoring())
{
// storing code
ar<<m_ptA<<m_ptB;
}

else
{
// loading code
ar>>m_ptA>>m_ptB;
}
}


dis moi ce qui ne va pa!
0
xterminhate Messages postés 371 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 23 septembre 2009
3 août 2005 à 15:06
Si tu remplaces les lignes << et >> par :

m_Horizon.Serialize(ar);
m_Verticale.Serialize(ar);

Ca améliore les choses ?
0
equimose Messages postés 65 Date d'inscription jeudi 4 septembre 2003 Statut Membre Dernière intervention 17 avril 2009
3 août 2005 à 16:16
--//Equimose//--

ouai ca plante pas ! il ya meme u binaire dans le fichire que j'enregistre
par contre je peu pas le récupérer ! il faut que je fasse une fonction deserialize() ????

enfin c'est deja bien !
0
xterminhate Messages postés 371 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 23 septembre 2009
3 août 2005 à 16:18
Je te laisse regarder plus en détail la MSDN, ca me donne des boutons les produits MS...
0
equimose Messages postés 65 Date d'inscription jeudi 4 septembre 2003 Statut Membre Dernière intervention 17 avril 2009
3 août 2005 à 16:55
je vois pas ou est le prob avec le fait qu'il ai deux objet CLigne dans mon horizon ?
ya bien deux objets Cpoint dans une Ligne,

j'allai pas faire une horizon avec quatre points ??? c'est crade, et puis j'aurais beoin de mon objet ligne pour tracer des perspective!

je vais t'expliquer ce que je veu au final...
Avec mon appli, tu pourra tracer des cadrillage de carré en perspective.
pour ca j'ai besoin d'une ligne d'horizon, et un centre sur cette ligne
(donc deux lignes horiz et verti) le point de fuite quoi.
Je pourrai ajouté d'autre repére horizon sur ma perspective, ce qui explique le nom,(pour diferencier chaque horizon) et pour chaque horizon je pourrai dessiner des cadrillages différents avec des points
de fuites différents pour les diagonales.
le truc interressant que je veu, c'ext pouvoir faire varrier tout c'est point comme je l'entend,
de facon a ce que je puisse voir évolué mes different cadrillages...
Tu comprend ??????? je m'y prend bien ???? c'est vraiment la pire méthode ???


Donc au final j'enregistrerai un ou plusieur objet perpective. et mon document pourra comporter plusieur perspective,
que je pourrai selectionner( grace au nom peut etre) pour les modifier

Je pense a la structure !! elle serrai comme ca ?
Perspective=(N*Horizon + nom)
et pour chaque Horizon plusieur Cadrillage non ??aide moi..??
donc Horizon=(2Cligne , N*Cadrillage + nom)
je dois creer un autre objet Cadrillage peut etre je crois ?
Cadrillage=(N*CLigne + nom)

c a l'air corect de cette facon ??
0
xterminhate Messages postés 371 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 23 septembre 2009
3 août 2005 à 17:11
Ce qui me gènre : "CHorizon qui dérive de CLigne"... pourquoi ?
0
Rejoignez-nous