Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

Why C++ compiler gives this error? Why i can access lol() from B, but can not access rofl() [without parameters]. Where is the catch?

class A
{
public:
   void lol(void) {}
   void rofl(void) { return rofl(0);}
   virtual void rofl(int x) {}
};

class B : public A
{
public:
   virtual void rofl(int x) {}
};

int _tmain(int argc, _TCHAR* argv[])
{
    A a;
   a.lol();
   a.rofl(1);
   a.rofl();

   B  b;
   b.lol();
   b.rofl(1);    
   b.rofl(); //ERROR -> B::rofl function does not take 0 arguments


   return 0;
}
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
216 views
Welcome To Ask or Share your Answers For Others

1 Answer

The B::rofl(int) 'hides' the A::rofl(). In order to have A's rofl overloads, you should declare B to be using A::rofl;.

class B : public A {
public: 
    using A::rofl;
    ...
};

This is a wise move of C++: it warns you that you probably also need to override the A::rofl() method in B. Either you do that, or you explicitly declare that you use A's other overloads.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...