¿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