具有继承的重载方法/运算符将不起作用

kok*_*ing 3 c++ inheritance operator-overloading

当一个类只有对其内容的持续访问权限时,我编写了代码,并且该代码由提供相同方法的其他类继承,但可以正常访问其成员.当我尝试通过gcc编译它时,我得到以下错误代码:

error: passing ‘const A’ as ‘this’ argument of ‘void A::operator()()’ discards qualifiers 
Run Code Online (Sandbox Code Playgroud)

这里是可编译的示例代码:

#include<stdio.h>

class ConstA {
    public:
        void operator()() const {
            printf("const\n");
        }
};

class A : public ConstA {
    public:
        void operator()() {
            printf("non-const\n");
        }
};

class B : public A {
};

void f(const A& a) {
    a();
}

int main() {
    B b;
    f(b);
}
Run Code Online (Sandbox Code Playgroud)

编译器尝试在没有const属性的情况下调用方法(operator()),而const方法可以在基本ConstA类中访问.我不知道为什么会出现这种错误.

Xeo*_*Xeo 10

const方法不可访问,基类版本被派生类版本隐藏,这是一个烦人的问题.你需要using ConstA::operator()将它纳入范围A.

class A : public ConstA{
public:
  using ConstA::operator();

  void operator()(){
    printf("non-const\n");
  }
};
Run Code Online (Sandbox Code Playgroud)

如需进一步阅读,请查看我的这个问题,这有一些很好的解释.