2016-05-13 7 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'アクセスメソッドをBaseクラスに追加してください。 – songyuanyao

+2

'dt'を' protected'としてアクセス可能にします。 –

答えて

4

基本クラスから継承すると、すべてのプライベートメンバーは派生した子にアクセスできません。

外部に公開する必要があるが、派生クラスからアクセスできるようにする必要がある場合は、そのようなメンバーをprotectedにしてください。

0

dtを保護(または公開)してください。

クラスのプライベートメンバーは、派生クラスであっても、そのクラスの外部(フレンドの関数やクラスを除く)からアクセスできません。保護されたメンバーは、外部クラスではなく、派生クラスからアクセスできるメンバーとして特別に設計されています。

関連する問題