当前位置:  开发笔记 > 编程语言 > 正文

无法调用基类保护函数?

如何解决《无法调用基类保护函数?》经验,为你挑选了1个好方法。

我不能在我的基类中调用protected函数.为什么?它看起来像这样:

class B : B2
{
public:
  virtual f1(B*)=0;
protected:
  virtual f2(B*) { codehere(); }
}
class D : public B
{
public:
  virtual f1(B*b) { return f2(b); }
protected:
  virtual f2(B*b) { return b->f2(this); }
}

在msvc中我得到错误错误C2248:'name :: class :: f2':无法访问类'name :: class'中声明的受保护成员

在gcc中我得到错误:'virtual int name :: class :: f2()'受到保护.

这是为什么?我认为受保护成员的要点是派生类调用.



1> Calmarius..:

受保护的成员函数只能在基类内或其派生类中调用.你不能在课外打电话给他们.外部调用意味着调用类类型变量的成员函数.

所以

virtual f1(B*b) { return f2(b); }

没关系,因为f2对类本身进行操作.(在里面叫)

virtual f2(B*b) { return b->f2(this); }

不会编译,因为f2操作b而不是D类本身.(外面叫)这是非法的.

要解决它B:f2应该是公开的.

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有