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,其中有一些很好的解释. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |