2016-05-13 142 views
0

我對C++的OO方面並不是很有經驗,我試圖移植一些代碼並刷新我的知識,但我遇到了問題。我有這樣定義的類:在派生類中實現虛函數時訪問基類私有成員

 

class ExtendedKalmanFilter 
{ 
private: 

    double dt; 


public: 
    ExtendedKalmanFilter(int states); 

    virtual VectorXd f(VectorXd x, VectorXd u); 
    virtual MatrixXd F(VectorXd x); 
    virtual VectorXd h(VectorXd x); 
    virtual MatrixXd H(VectorXd x); 

    ~ExtendedKalmanFilter(); 
}; 
 

我有另一類它繼承ExtendedKalmanFilter並實現虛擬功能:

 

class KineticEnergyEKF : public ExtendedKalmanFilter { 
public: 
    KineticEnergyEKF(int nstates) : ExtendedKalmanFilter(nstates) 
    {} 


    VectorXd f(VectorXd x, VectorXd u) 
    { 
     this->dt = 1.0; //ERROR: Apparently I have no access to dt 
    } 
    MatrixXd F(VectorXd x); 
    VectorXd h(VectorXd x); 
    MatrixXd H(VectorXd x); 
}; 
 

Visual Studio是表示我無法訪問dt,但是我訪問在ExtendedKalmanFilter中定義的其他功能。我如何訪問dt

+4

使'dt'' protected''或在基類中添加其''public' /'protected'訪問方法。 – songyuanyao

+2

將'dt'設置爲'protected'。 –

回答

4

當您從基類繼承時,其派生子元素無法訪問其所有私有成員。

如果您需要使它們對外部世界保密,但可以通過派生類訪問,請使用此類成員protected

0

使dt保護(或公開)。

類的私人成員不能在該類之外訪問(除了朋友函數或類),即使是派生類也是如此。受保護的成員專門設計爲派生類訪問的成員,但不是外部世界。

相關問題