Sobrecarga de herencia y método

¿Por qué el comstackdor C ++ da este error? Por qué puedo acceder a lol () desde B, pero no puedo acceder a rofl () [sin parámetros]. ¿Dónde está la captura?

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; } 

El B::rofl(int) ‘oculta’ el A::rofl() . Para tener sobrecargas de rofl , debe declarar que B está using A::rofl; .

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

Este es un movimiento inteligente de C ++: te advierte que probablemente también necesites anular el método A::rofl() en B O haces eso, o declaras explícitamente que usas otras sobrecargas de A