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

时间:2014-07-05 16:32:55

标签: c++ class inheritance shared-ptr

我有一个节点类和派生的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 个答案:

答案 0 :(得分:1)

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