Problème avec héritage et méthode virtuelle

Problème avec héritage et méthode virtuelle - C++ - Programmation

Marsh Posté le 14-11-2007 à 19:48:02    

Bonjour,
 
J'ai rédigé le code suivant :
 

Code :
  1. #include <iostream>
  2. using namespace std;
  3. class Article
  4. {
  5. public :
  6.   Article() {}
  7.   Article(string denom) : name(denom) {}
  8.   virtual double tva(double*);
  9.  
  10. private:
  11.   string        name;
  12. };
  13. class Livre : public Article
  14. {
  15. public :
  16.   Livre() {}
  17.   Livre(string denom) : Article(denom) {}
  18.   double tva(double* entree)
  19.   {
  20.     return (19.6);
  21.   }
  22. };
  23. int main()
  24. {
  25.   Livre Bouquin("Ra" );
  26. }


 
Mais, en retour, à la compilation, j'ai le message d'erreur suivant :
 

Code :
  1. main.o(.text+0x38): In function `main':
  2. : undefined reference to `vtable for Article'
  3. main.o(.text+0x73): In function `main':
  4. : undefined reference to `vtable for Article'
  5. main.o(.gnu.linkonce.r._ZTI5Livre+0x8): undefined reference to `typeinfo for Article'
  6. collect2: ld returned 1 exit status


 
Pourtant, je pensais avoir correctement rédigé ce code, qui combine à la fois les notions d'héritage et de méthode virtuelle.
J'ai déjà rédigé des codes avec des principes simialires qui compilait.
 
Pourriez-vous m'indiquer l'erreur, surement bête , ;) que j'ai du commettre.
 
D'avance merci,
 
Nathan

Reply

Marsh Posté le 14-11-2007 à 19:48:02   

Reply

Marsh Posté le 14-11-2007 à 19:53:57    

faut mettre la méthode en virtuel pure :o

Reply

Marsh Posté le 15-11-2007 à 01:33:21    

pour Article c'est soit ça:
 
virtual double tva(double*) = 0; // pure, non instanciable, les classes dérives doivent implémenter la méthode virtuelle
 
soit ça (pour avoir un resultat par défaut):
 
virtual double tva(double*) { return 0; } // fallback sur une tva de 0
 
est-ce bien nécessaire d'avoir un pointeur sur double en entrée ?  
(si tu retournes le pourcentage de tva, y'a pas a avoir de paramètres)


Message édité par bjone le 15-11-2007 à 01:33:58
Reply

Marsh Posté le 15-11-2007 à 01:54:12    

Il y a en qui ont appris le C++ dans des pochettes surprises  :lol:  :D

Reply

Marsh Posté le 15-11-2007 à 08:35:59    

AthlonSoldier a écrit :

Il y a en qui ont appris le C++ dans des pochettes surprises  :lol:  :D


 
Dans le meilleur des cas :/
A crooire que la totalité des formations C++ ici sont à chier :/

Reply

Marsh Posté le 15-11-2007 à 13:07:25    

doh my bad ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed