我正在编写以下结构:
class F {
protected:
F* i;
public:
F(){i=NULL;}
virtual F* clone()const=0;
virtual double operator()(double x)const=0;
virtual F* derivative()const=0;
virtual double inverse(double y)const=0;
virtual ~F(){}
};
class T : public F{
string n;
public:
T(string n_);
F* clone()const;
double operator()(double x)const;
F* derivative()const;
double inverse(double y)const;
~T(){}
};
我写作方法' T :: derivative'马上。我的两个第一行是:
F* T::derivative()const
{
F* deriv;
deriv->i=clone();
}
F* T::clone()const
{
return new T(n);
}
但Xcode告诉我“T ::衍生”中的第二行' 'i' is a protected member of 'F
。
我无法理解为什么在“T' T”中继续使用“F'”时我无法访问它。
答案 0 :(得分:2)
类T
的成员只能访问类T
的对象的受保护成员(包括当前对象),而不能访问类F
或其他子类的任意对象。
无论deriv
应该是什么(目前,它是一个未初始化的指针,所以即使代码编译也会遇到大问题),它必须是T*
(或子类型T
),以便通过它访问i
。要么是这样,要么i
需要更广泛地访问。
答案 1 :(得分:0)
由于受保护的成员只能访问(Sub Class)T(此处)(因为只有来自基础F的derievedd类)。访问i(受保护的成员)实例化T并使用i。 将此更改为
F* deriv;
T* deriv;
你的错误就消失了。