派生类无法访问基类的受保护方法

Posted

技术标签:

【中文标题】派生类无法访问基类的受保护方法【英文标题】:Derived class can't access protected method of base class 【发布时间】:2014-07-05 16:32:54 【问题描述】:

我有一个节点类和一个派生的 beta 节点类。我的节点类有一个方法来返回这个的 shared_ptr。这里本质上是节点类:

class Node 
   int start;
   int stop;
   std::string data;

protected: 
   inline std::shared_ptr<Node> getSPNode() return make_shared<Node>(this);

public:
   //some other stuff
;

class BetaNode : public Node 
   int location;

public:
   BetaNode(int curr, int next);
   //some other stuff
;

这些类还有其他一些问题,但我的问题是 getSPNode() 方法。当我这样称呼它时,我得到一个“'getSPNode'是'Node'的受保护成员”错误。我认为 BetaNode 可以访问它,因为它是派生成员。

void someFunction(shared_ptr<Node> someNode, int curr, int next) 
   shared_ptr<BetaNode> beta(new BetaNode(curr, next));
   if (beta->getSPNode() == someNode)
      //do stuff

编辑:抱歉重复,在我发布后立即在此处找到答案: Why can't I access a protected member from an instance of a derived class?

【问题讨论】:

【参考方案1】:

您正在尝试访问类层次结构之外的protected 方法。您需要将其设为 public 方法才能使其正常工作。

【讨论】:

以上是关于派生类无法访问基类的受保护方法的主要内容,如果未能解决你的问题,请参考以下文章

在派生类中使用来自虚拟基类的受保护 ctor

C++ 派生模板类:访问实例的受保护成员

无法访问派生类中基类的受保护成员

protectedpublicprivate

无法访问派生类中的受保护方法

protected 成员与派生类