为什么C++编译器会出现此错误?为什么我可以从B访问lol(),但不能访问rofl()[没有参数]。渔获物在哪里?

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

最佳答案

B::rofl(int)“隐藏” A::rofl()。为了使Arofl重载,您应该将B声明为using A::rofl;

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

这是C++的明智之举:它警告您可能还需要重写A::rofl()中的B方法。您要么这样做,要么明确声明您使用A的其他重载。

关于c++ - 继承和方法重载,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2973976/

10-12 13:49