gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 19:46:54 25 4
gpt4 key购买 nike

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

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

这里是示例可编译代码:

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

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

最佳答案

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

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

void operator()(){
printf("non-const\n");
}
};

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

关于c++ - 具有继承的重载方法/运算符将不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6227617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com