加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 10:19:14 所属栏目:百科 来源:网络整理
导读:当一个类只有对其内容的持续访问权限时,我编写了代码,并且该代码由提供相同方法的其他类继承,但可以正常访问其成员.当我尝试通过 gcc编译它时,我得到以下错误代码: error: passing ‘const A’ as ‘this’ argument of ‘void A::operator()()’ discards
当一个类只有对其内容的持续访问权限时,我编写了代码,并且该代码由提供相同方法的其他类继承,但可以正常访问其成员.当我尝试通过 gcc编译它时,我得到以下错误代码:

error: passing ‘const A’ as ‘this’ argument of ‘void A::operator()()’ discards qualifiers

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

#include<stdio.h>

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

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

class B : public A {
};

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

int main() {
    B b;
    f(b);
}

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

解决方法

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

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

  void operator()(){
    printf("non-constn");
  }
};

如需进一步阅读,请查看this question of mine,其中有一些很好的解释.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读