我对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
?
答案 0 :(得分:4)
当您从基类继承时,其派生子级无法访问其所有私有成员。
如果您需要将它们设为外部世界,但可以对派生类进行访问,请创建此类成员'Loop through cells A6:Axxx and delete cells that contain an "x."
For Each c In Range("AX6:A" & ws.Range("B" & Rows.Count).End(xlUp).Row)
If c.Value2 = "NoBo" Then
Set clearRng = ws.Range("B" & c.Row & ":" & "AN" & c.Row)
End If
clearRng.Clear
Next
。
答案 1 :(得分:0)
让dt
受保护(或公开)。
类的私有成员在该类之外(除了友元函数或类)之外是不可访问的,即使是派生类也是如此。受保护的成员专门设计为派生类可访问的成员,而不是外部世界。