Heritage virtual pure sur prototype différent.

Heritage virtual pure sur prototype différent. - C++ - Programmation

Marsh Posté le 17-03-2014 à 12:29:25    

Hello à tous.
J'aimerai comprendre pourquoi le petit bout de code suivant ne compile pas :

Code :
  1. class A {
  2. public:
  3. void bar(char *buf, int size)
  4. {
  5.  std::cout << "A::foo();" << std::endl;
  6.  bar(buf[0]);
  7. }
  8. virtual void bar(char buf) = 0;
  9. };
  10. class B : public A {
  11. public:
  12. virtual void bar(char buf)
  13. {
  14.  std::cout << "B::bar();" << std::endl;
  15. }
  16. };
  17. int main()
  18. {
  19. B b;
  20. b.bar("toto", 5);
  21. }


 :??:  :??:


Message édité par azubal le 17-03-2014 à 12:29:43
Reply

Marsh Posté le 17-03-2014 à 12:29:25   

Reply

Marsh Posté le 17-03-2014 à 12:35:56    

déclarer un symbole dans B cache les symboles que tu as hérités et qui portent le même nom. Tu vas avoir besoin de publier ta fonction de A à nouveau.

 

Edit :

Code :
  1. class A {
  2. public:
  3. void bar(const char *buf, int size)
  4. {
  5.   std::cout << "A::foo();" << std::endl;
  6.   bar(buf[0]);
  7. }
  8. virtual void bar(char buf) = 0;
  9. };
  10. class B : public A {
  11. public:
  12. virtual void bar(char buf)
  13. {
  14.   std::cout << "B::bar();" << std::endl;
  15. }
  16. using A::bar;
  17. };
  18. int main()
  19. {
  20. B b;
  21. b.bar("toto", 5);
  22. }
 

Je t'ai aussi passé A::bar comme prenant un const char*, parce que c'est pas top de passer une chaine constante littérale en char*


Message édité par theshockwave le 17-03-2014 à 12:39:03

---------------
last.fm
Reply

Marsh Posté le 17-03-2014 à 12:42:21    

Ah super. Je ne savais pas.
Merci  :jap:

Reply

Sujets relatifs:

Leave a Replay

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