Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1426 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Question sur l'héritage en C++

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Question sur l'héritage en C++

n°1341890
mr simon
Posté le 08-04-2006 à 01:09:24  profilanswer
 

Bonjour,

 

aujourdh'ui j'ai rencontré un problème avec des héritages en C++. Voici les deux classes à l'origine du problèmes.

 
Code :
  1. class BaseMessage {
  2. public:
  3.    std:string toXML();
  4.    virtual void toXML(XMLWriter& writer) = 0;
  5. }
  6. class Message : public BaseMessage {
  7. public:
  8.    void toXML(XMLWriter& writer);
  9. }


Lorsque je fait :

Code :
  1. Message aMessage;
  2. aMessage.toXML();

J'ai l'erreur suivante :

 

error: no matching function for call to 'Message::toXML()'
 
./message.h:29: note: candidates are: virtual void Message::toXML(XMLWriter& )


Si je change la méthode toXML() en toXMLString cela marche.

 

D'ou vient le problème ?

 

Merci.

 


mood
Publicité
Posté le 08-04-2006 à 01:09:24  profilanswer
 

n°1341917
SBAM
Best recording of rach 3.
Posté le 08-04-2006 à 03:54:40  profilanswer
 

L'argument de toXML ?  [:greenleaf]


Message édité par SBAM le 08-04-2006 à 03:55:27
n°1341963
Taz
bisounours-codeur
Posté le 08-04-2006 à 10:27:37  profilanswer
 

c'est normal, la version avec argument masque l'autre.

n°1341966
++fab
victime du syndrome IH
Posté le 08-04-2006 à 10:34:08  profilanswer
 

void Message::toXML( XMLWriter& writer ) masque les noms toXML dans tout les sub-object -- la supplantation de la fonction virtuelle est toutefois bien considérée. Ce qui fait que std::string BaseMessage::toXML() n'est pas considérée.
 
Je ne suis pas sur à 100% de l'explication. C'est une question que je me suis souvent posée, et j'y répond comme ça, j'espère que c'est correct.
 
Une bonne façon de procéder :
 

Code :
  1. class BaseMessage
  2. {
  3. public:
  4.         std::string toXML();
  5.         void toXML(XMLWriter& writer) { doToXML( writer ); }
  6. private:
  7.         virtual void doToXML( XMLWriter& writer ) = 0;
  8. };
  9. class Message : public BaseMessage
  10. {
  11. private:
  12.         virtual void doToXML(XMLWriter& writer);
  13. }


   

n°1341974
Taz
bisounours-codeur
Posté le 08-04-2006 à 10:57:02  profilanswer
 

bof, le mieux c'est de trouver un meilleur nom : là tes 2 fonctions n'ont ni le même type de retour, ni les mêmes arguments. renomme en writeXMLTo(writer)

n°1342073
mr simon
Posté le 08-04-2006 à 14:23:08  profilanswer
 

Oui je crois que je vais opter pour un autre nom, c'est plus facile. Mais ça m'était jamais arriver ce "masquage". Je commençais à plus rien n'y comprendre. Merci en tout cas.

n°1342150
slash33
Posté le 08-04-2006 à 19:17:35  profilanswer
 

Question relative au design.
 
Comment feriez vous pour gérer plusieurs modes de sérialisation pour le même objet parmi les formats XML, CSV, binaire par exemple ?

n°1342156
++fab
victime du syndrome IH
Posté le 08-04-2006 à 19:27:51  profilanswer
 

regardes Boost.Serialization, il y a 3 types d'archives, qui utilisent une fonction serialize() membre ou non de la classe dont on veut en sérialiser une instance.

n°1342317
slash33
Posté le 09-04-2006 à 10:28:23  profilanswer
 

Ok
 
Pour la postérité:
http://www.boost.org/libs/serialization/doc/index.html


Message édité par slash33 le 09-04-2006 à 10:34:29

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Question sur l'héritage en C++

 

Sujets relatifs
Question sur sauvegarde de BDD SQL chez Online[RESOLU] question tres simple sur nombre de caracteres a l'ecriture
question MySLQ et index[Perl] question relativement facile.
Question de débutant. Interface HTML pour mes scripts perl ???GridBagLayout et héritage
Question concernant l' IDquestion de sale noob : incrementer depuis une methode
Pointeurs sur fonction membre, héritage, toussaQuestion sur le CMS joomla
Plus de sujets relatifs à : Question sur l'héritage en C++


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR