2014-07-05 447 views
1

我有一個節點類和派生的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方法才能發揮作用。

相關問題